溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫(kù)重點(diǎn)概念

發(fā)布時(shí)間:2020-08-20 09:58:20 來(lái)源:網(wǎng)絡(luò) 閱讀:499 作者:小止1995 欄目:數(shù)據(jù)庫(kù)

service mysqld start:?jiǎn)?dòng)數(shù)據(jù)庫(kù)服務(wù)

MYSQL * mysql_init(MYSQL *mysql);初始化mysql句柄.如果mysql為NULL, 則分配一個(gè).

連接數(shù)據(jù)庫(kù):

數(shù)據(jù)庫(kù)重點(diǎn)概念



關(guān)閉連接:void STDCALL mysql_close(MYSQL *sock);

執(zhí)行sql語(yǔ)句:int mysql_query(MYSQL *connection ,const char *query);如果成功返回0,query為sql語(yǔ)句。

獲取結(jié)果:MYSQL_RES  * STDCALL  mysql_store_result(MYSQL *mysql);執(zhí)行此函數(shù)前必須調(diào)用sql:select* from stu

返回結(jié)果集中行的數(shù)目:int mysql_num_rows ( MYSQL_RES  *   result )

返回結(jié)果集中l(wèi)列的數(shù)目:int mysql_num_fields(MYSQL_RES  *   result )

注:要取得被 INSERT,UPDATE 或者 DELETE 查詢所影響到的行的數(shù)目,用 mysql_affected_rows()。


MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result);

對(duì)于結(jié)果集,返回所有MYSQL_FIELD結(jié)構(gòu)的數(shù)組。每個(gè)結(jié)構(gòu)提供了結(jié)果集中1列的字段定義。關(guān)于結(jié)果列所有列的MYSQL_FIELD結(jié)構(gòu)的數(shù)組。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

       檢索一個(gè)結(jié)果集合的下一行。當(dāng)在mysql_store_result()之后使用時(shí),如果沒(méi)有更多的行可檢索時(shí),mysql_fetch_row()返回NULL。

注:在行中值的數(shù)量由mysql_num_fields(result)給出。如果row保存了從一個(gè)對(duì)用mysql_fetch_row()調(diào)用返回的值,指向該值的指針作為row[0]到row[mysql_num_fields(result)-1]來(lái)存取。在行中的NULL值由NULL指針指出。

在行中字段值的長(zhǎng)度可以通過(guò)調(diào)用mysql_fetch_lengths()獲得??兆侄魏桶琋ULL的字段長(zhǎng)度都是 0;你可以通過(guò)檢查該值的指針區(qū)分他們。如果指針是NULL,字段是NULL;否則字段是空的。

索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。

如果想按特定職員的姓來(lái)查找他,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。

例如這樣一個(gè)查詢:select * from table1 where id=10000。如果沒(méi)有索引,必須遍歷整個(gè)表,直到ID等于10000的這一行被找到為止;有了索引之后(必須是在ID這一列上建立的索引),即可在索引中查找。由于索引是經(jīng)過(guò)某種算法優(yōu)化過(guò)的,因而查找次數(shù)要少的多??梢?jiàn),索引是用來(lái)定位的。

數(shù)據(jù)庫(kù)索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫(kù)的查詢速度。

索引分為聚簇索引非聚簇索引兩種。

聚簇索引:是按照數(shù)據(jù)存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對(duì)于單行的檢索很快。

根據(jù)數(shù)據(jù)庫(kù)的功能,可以在數(shù)據(jù)庫(kù)設(shè)計(jì)器中創(chuàng)建三種索引:唯一索引、主鍵索引和聚簇索引。

注:盡管唯一索引有助于定位信息,但為獲得最佳性能結(jié)果,建議改用主鍵或唯一約束。

唯一索引 唯一索引是不允許其中任何兩行具有相同索引值的索引。

當(dāng)現(xiàn)有數(shù)據(jù)中存在重復(fù)的鍵值時(shí),大多數(shù)數(shù)據(jù)庫(kù)不允許將新創(chuàng)建的唯一索引與表一起保存。數(shù)據(jù)庫(kù)還可能防止添加將在表中創(chuàng)建重復(fù)鍵值的新數(shù)據(jù)。例如,如果在employee表中職員的姓(lname)上創(chuàng)建了唯一索引,則任何兩個(gè)員工都不能同姓。

主鍵索引

注:主鍵是表中的一個(gè)或多個(gè)字段,它的值用于惟一地標(biāo)識(shí)表中的某一條記錄,使用索引可快速訪問(wèn)數(shù)據(jù)庫(kù)表中的特定信息。

數(shù)據(jù)庫(kù)表經(jīng)常有一列或多列組合,其值唯一標(biāo)識(shí)表中的每一行。該列稱為表的主鍵。

主鍵列不允許空值。 唯一索引允許空值。
創(chuàng)建 PRIMARY KEY 或 UNIQUE 約束會(huì)自動(dòng)為指定的列創(chuàng)建唯一索引。創(chuàng)建 UNIQUE 約束和創(chuàng)建獨(dú)立于約束的唯一索引沒(méi)有明顯的區(qū)別。數(shù)據(jù)驗(yàn)證的方式是相同的,而且查詢優(yōu)化器不會(huì)區(qū)分唯一索引是由約束創(chuàng)建的還是手動(dòng)創(chuàng)建的。但是,如果您的目的是要實(shí)現(xiàn)數(shù)據(jù)完整性,則應(yīng)為列創(chuàng)建 UNIQUE 或 PRIMARY KEY 約束。這樣做才能使索引的目標(biāo)明確。

在數(shù)據(jù)庫(kù)關(guān)系圖中為表定義主鍵將自動(dòng)創(chuàng)建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個(gè)值都唯一。當(dāng)在查詢中使用主鍵索引時(shí),它還允許對(duì)數(shù)據(jù)的快速訪問(wèn)。

聚簇索引

在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個(gè)表只能包含一個(gè)聚集索引。

如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數(shù)據(jù)訪問(wèn)速度。

索引列

可以基于數(shù)據(jù)庫(kù)表中的單列或多列創(chuàng)建索引。多列索引可以區(qū)分其中一列可能有相同值的行。

如果經(jīng)常同時(shí)搜索兩列或多列或按兩列或多列排序時(shí),索引也很有幫助。例如,如果經(jīng)常在同一查詢中為姓和名兩列設(shè)置判據(jù),那么在這兩列上創(chuàng)建多列索引將很有意義。

確定索引的有效性:

檢查查詢的WHERE和JOIN子句。在任一子句中包括的每一列都是索引可以選擇的對(duì)象。

建立索引時(shí)需考慮:

注:對(duì)新索引進(jìn)行試驗(yàn)以檢查它對(duì)運(yùn)行查詢性能的影響。

考慮已在表上創(chuàng)建的索引數(shù)量。最好避免在單個(gè)表上有很多索引。

檢查已在表上創(chuàng)建的索引的定義。最好避免包含共享列的重疊索引。

檢查某列中唯一數(shù)據(jù)值的數(shù)量,并將該數(shù)量與表中的行數(shù)進(jìn)行比較。比較的結(jié)果就是該列的可選擇性,這有助于確定該列是否適合建立索引,如果適合,確定索引的類型。

觸發(fā)器(trigger)是SQL server 提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來(lái)觸發(fā),比如當(dāng)對(duì)一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會(huì)激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。

(1)觸發(fā)器可以查詢其他表,而且可以包含復(fù)雜的SQL語(yǔ)句。它們主要用于強(qiáng)制服從復(fù)雜的業(yè)務(wù)規(guī)則或要求。例如:您可以根據(jù)客戶當(dāng)前的帳戶狀態(tài),控制是否允許插入新訂單。

(2)觸發(fā)器也可用于強(qiáng)制引用完整性,以便在多個(gè)表中添加、更新或刪除行時(shí),保留在這些表之間所定義的關(guān)系。然而,強(qiáng)制引用完整性的最好方法是在相關(guān)表中定義主鍵和外鍵約束。如果使用數(shù)據(jù)庫(kù)關(guān)系圖,則可以在表之間創(chuàng)建關(guān)系以自動(dòng)創(chuàng)建外鍵約束。

觸發(fā)器與存儲(chǔ)過(guò)程的唯一區(qū)別是觸發(fā)器不能執(zhí)行EXECUTE語(yǔ)句調(diào)用,而是在用戶執(zhí)行Transact-SQL語(yǔ)句時(shí)自動(dòng)觸發(fā)執(zhí)行。

觸發(fā)器有如下作用:

  • 可在寫入數(shù)據(jù)表前,強(qiáng)制檢驗(yàn)或轉(zhuǎn)換數(shù)據(jù)。

  • 觸發(fā)器發(fā)生錯(cuò)誤時(shí),異動(dòng)的結(jié)果會(huì)被撤銷。

  • 部份數(shù)據(jù)庫(kù)管理系統(tǒng)可以針對(duì)數(shù)據(jù)定義語(yǔ)言(DDL)使用觸發(fā)器,稱為DDL觸發(fā)器。

  • 可依照特定的情況,替換異動(dòng)的指令 (INSTEAD OF)。

  • SQL Server 包括三種常規(guī)類型的觸發(fā)器:DML 觸發(fā)器、DDL 觸發(fā)器和登錄觸發(fā)器。


  • DML觸發(fā)器

  • 當(dāng)數(shù)據(jù)庫(kù)中表中的數(shù)據(jù)發(fā)生變化時(shí),包括insert,update,delete任意操作,如果我們對(duì)該表寫了對(duì)應(yīng)的DML觸發(fā)器,那么該觸發(fā)器自動(dòng)執(zhí)行。DML觸發(fā)器的主要作用在于強(qiáng)制執(zhí)行業(yè) 務(wù)規(guī)則,以及擴(kuò)展Sql Server約束,默認(rèn)值等。因?yàn)槲覀冎兰s束只能約束同一個(gè)表中的數(shù)據(jù),而觸發(fā)器中則可以執(zhí)行任意Sql命令。


  • DDL觸發(fā)器

  • 它是Sql Server2005新增的觸發(fā)器,主要用于審核與規(guī)范對(duì)數(shù)據(jù)庫(kù)中表,觸發(fā)器,視圖等結(jié)構(gòu)上的操作。比如在修改表,修改列,新增表,新增列等。它在數(shù)據(jù)庫(kù)結(jié)構(gòu)發(fā)生變化時(shí)執(zhí)行,我們主要用它來(lái)記錄數(shù)據(jù)庫(kù)的修改過(guò)程,以及限制程序員對(duì)數(shù)據(jù)庫(kù)的修改,比如不允許刪除某些指定表等。


  • 登錄觸發(fā)器

  • 登錄觸發(fā)器將為響應(yīng) LOGIN 事件而激發(fā)存儲(chǔ)過(guò)程。與 SQL Server 實(shí)例建立用戶會(huì)話時(shí)將引發(fā)此事件。登錄觸發(fā)器將在登錄的身份驗(yàn)證階段完成之后且用戶會(huì)話實(shí)際建立之前激發(fā)。因此,來(lái)自觸發(fā)器內(nèi)部且通常將到達(dá)用戶的所有消息(例如錯(cuò)誤消息和來(lái)自 PRINT 語(yǔ)句的消息)會(huì)傳送到 SQL Server 錯(cuò)誤日志。如果身份驗(yàn)證失敗,將不激發(fā)登錄觸發(fā)器。


  • 注:約束,是指對(duì)你的表,或表中的列等等,進(jìn)行某些條件的限制.重點(diǎn)是“限制”.
    觸發(fā)器,是指在你進(jìn)行一些操作時(shí),比如DELETE UPDATE等操作時(shí),引起的一些另外的操作(是做了摸個(gè)動(dòng)作之后,引起的反應(yīng)).

  • 事務(wù)(Transaction)是訪問(wèn)并可能更新數(shù)據(jù)庫(kù)中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。事務(wù)通常由高級(jí)數(shù)據(jù)庫(kù)操縱語(yǔ)言或編程語(yǔ)言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行所引起,并用形如begin transactionend transaction語(yǔ)句(或函數(shù)調(diào)用)來(lái)界定。事務(wù)由事務(wù)開(kāi)始(begin transaction)和事務(wù)結(jié)束(end transaction)之間執(zhí)行的全體操作組成。

  • 例如:在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一條SQL語(yǔ)句,一組SQL語(yǔ)句或整個(gè)程序。

  • 數(shù)據(jù)庫(kù)重點(diǎn)概念

  • 特性

  • 事務(wù)是恢復(fù)和并發(fā)控制的基本單位。

  • 事務(wù)應(yīng)該具有4個(gè)屬性:原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱為ACID特性

  • 原子性(atomicity):一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中包括的諸操作要么都做,要么都不做。

  • 一致性(consistency):事務(wù)必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。一致性與原子性是密切相關(guān)的。

  • 隔離性(isolation):一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。

  • 持久性(durability):持久性也稱永久性(permanence),指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來(lái)的其他操作或故障不應(yīng)該對(duì)其有任何影響。

  • 事務(wù)類型

  • (1)手動(dòng)事務(wù)

  • 手動(dòng)事務(wù)允許顯式處理若干過(guò)程,這些過(guò)程包括:開(kāi)始事務(wù)、控制事務(wù)邊界內(nèi)的每個(gè)連接和資源登記、確定事務(wù)結(jié)果(提交或中止)以及結(jié)束事務(wù)。盡管此模型提供了對(duì)事務(wù)的標(biāo)準(zhǔn)控制,但它缺少一些內(nèi)置于自動(dòng)事務(wù)模型的簡(jiǎn)化操作。例如,在手動(dòng)事務(wù)中數(shù)據(jù)存儲(chǔ)區(qū)之間沒(méi)有自動(dòng)登記和協(xié)調(diào)。此外,與自動(dòng)事務(wù)不同,手動(dòng)事務(wù)中事務(wù)不在對(duì)象間流動(dòng)。

  • 如果選擇手動(dòng)控制分布式事務(wù),則必須管理恢復(fù)、并發(fā)、安全性和完整性。也就是說(shuō),必須應(yīng)用維護(hù)與事務(wù)處理關(guān)聯(lián)的 ACID 屬性所需的所有編程方法。

  • (2)自動(dòng)事務(wù)

  • .NET 頁(yè)、XML Web services方法或 .NET Framework 類一旦被標(biāo)記為參與事務(wù),它們將自動(dòng)在事務(wù)范圍內(nèi)執(zhí)行。您可以通過(guò)在頁(yè)、XML Web services 方法或類中設(shè)置一個(gè)事務(wù)屬性值來(lái)控制對(duì)象的事務(wù)行為。特性值反過(guò)來(lái)確定實(shí)例化對(duì)象的事務(wù)性行為。因此,根據(jù)聲明特性值的不同,對(duì)象將自動(dòng)參與現(xiàn)有事務(wù)或正在進(jìn)行的事務(wù),成為新事務(wù)的根或者根本不參與事務(wù)。聲明事務(wù)屬性的語(yǔ)法在 .NET Framework 類、.NET 頁(yè)和 XML Web services 方法中稍有不同。

注:一般來(lái)說(shuō),對(duì)于安全性要求比較高的業(yè)務(wù),建議使用事務(wù)。


存儲(chǔ)引擎

我們說(shuō)數(shù)據(jù)庫(kù)是組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。那么,數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方式,就是存儲(chǔ)引擎。

在mysql中,存儲(chǔ)引擎是以插件的形式加載的。Mysql的存儲(chǔ)引擎種類繁多,對(duì)于我們來(lái)說(shuō),要熟悉兩種存儲(chǔ)引擎去,MyISAM和inonoDB。Myisam不支持事務(wù)?!nnodb支持事務(wù)。

拓展:例如,如果你在研究大量的臨時(shí)數(shù)據(jù),你也許需要使用內(nèi)存存儲(chǔ)引擎。內(nèi)存存儲(chǔ)引擎能夠在內(nèi)存中存儲(chǔ)所有的表格數(shù)據(jù)。又或者,你也許需要一個(gè)支持事務(wù)處理的數(shù)據(jù)庫(kù)(以確保事務(wù)處理不成功時(shí)數(shù)據(jù)的回退能力)。

這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲(chǔ)引擎(也稱作表類型)。MySQL默認(rèn)配置了許多不同的存儲(chǔ)引擎,可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用。你可以選擇適用于服務(wù)器、數(shù)據(jù)庫(kù)和表格的存儲(chǔ)引擎,以便在選擇如何存儲(chǔ)你的信息、如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┳畲蟮撵`活性。選擇如何存儲(chǔ)和檢索你的數(shù)據(jù)的這種靈活性是MySQL為什么如此受歡迎的主要原因。

各種存儲(chǔ)引擎特點(diǎn):

數(shù)據(jù)庫(kù)重點(diǎn)概念



向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI