0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

干貨:38個(gè)MySQL數(shù)據(jù)庫(kù)的必備知識(shí)和小技巧

如意 ? 來(lái)源:運(yùn)維派微信公眾號(hào) ? 作者:運(yùn)維派微信公眾號(hào) ? 2020-08-31 13:08 ? 次閱讀

1、如何快速掌握MySQL?

培養(yǎng)興趣

興趣是最好的老師,不論學(xué)習(xí)什么知識(shí),興趣都可以極大地提高學(xué)習(xí)效率。當(dāng)然學(xué)習(xí)MySQL 5.6也不例外。

夯實(shí)基礎(chǔ)

計(jì)算機(jī)領(lǐng)域的技術(shù)非常強(qiáng)調(diào)基礎(chǔ),剛開(kāi)始學(xué)習(xí)可能還認(rèn)識(shí)不到這一點(diǎn),隨著技術(shù)應(yīng)用的深入,只有有著扎實(shí)的基礎(chǔ)功底,才能在技術(shù)的道路上走得更快、更遠(yuǎn)。對(duì)于MySQL的學(xué)習(xí)來(lái)說(shuō),SQL語(yǔ)句是其中最為基礎(chǔ)的部分,很多操作都是通過(guò)SQL語(yǔ)句來(lái)實(shí)現(xiàn)的。所以在學(xué)習(xí)的過(guò)程中,讀者要多編寫(xiě)SQL語(yǔ)句,對(duì)于同一個(gè)功能,使用不同的實(shí)現(xiàn)語(yǔ)句來(lái)完成,從而深刻理解其不同之處。

及時(shí)學(xué)習(xí)新知識(shí)

正確、有效地利用搜索引擎,可以搜索到很多關(guān)于MySQL 5.6的相關(guān)知識(shí)。同時(shí),參考別 人解決問(wèn)題的思路,也可以吸取別人的經(jīng)驗(yàn),及時(shí)獲取最新技術(shù)資料。

多實(shí)踐操作

數(shù)據(jù)庫(kù)系統(tǒng)具有極強(qiáng)的操作性,需要多動(dòng)手上機(jī)操作。在實(shí)際操作的過(guò)程中才能發(fā)現(xiàn)問(wèn)題, 并思考解決問(wèn)題的方法和思路,只有這樣才能提高實(shí)戰(zhàn)的操作能力。

2、如何選擇服務(wù)器的類型?

MySQL服務(wù)器配置窗口中各個(gè)參數(shù)的含義如下。

【Server Configuration Type】該選項(xiàng)用于設(shè)置服務(wù)器的類型。單擊該選項(xiàng)右側(cè)的向下按鈕, 即可看到包括3個(gè)選項(xiàng)。

3個(gè)選項(xiàng)的具體含義如下:

Development Machine(開(kāi)發(fā)機(jī)器):該選項(xiàng)代表典型個(gè)人用桌面工作站。假定機(jī)器上運(yùn)行 著多個(gè)桌面應(yīng)用程序。將MySQL服務(wù)器配置成使用最少的系統(tǒng)資源。

Server Machine (服務(wù)器):該選項(xiàng)代表服務(wù)器,MySQL服務(wù)器可以同其它應(yīng)用程序一起 運(yùn)行,例如FTP、email和web服務(wù)器。MySQL服務(wù)器配置成使用適當(dāng)比例的系統(tǒng)資源。

DedicatedMySQL Server Machine (專用 MySQL 服務(wù)器):該選項(xiàng)代表只運(yùn)行MySQL服務(wù)的服務(wù)器。假定運(yùn)行沒(méi)有運(yùn)行其它應(yīng)用程序。

MySQL服務(wù)器配置成使用所有可用系統(tǒng)資源。作為初學(xué)者,建議選擇【DevelopmentMachine】(開(kāi)發(fā)者機(jī)器)選項(xiàng),這樣占用系統(tǒng)的資源 比較少。

3、如何選擇存儲(chǔ)引擎

不同存儲(chǔ)引擎都有各自的特點(diǎn),以適應(yīng)不同的需求,如下表所示。為了做出選擇:

首先需 要考慮每一個(gè)存儲(chǔ)引擎提供了哪些不同的功能。如果要提供提交,回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)能力,并要求實(shí)現(xiàn)并發(fā)控 制,InnoDB是個(gè)很好的選擇。如果數(shù)據(jù)表主要用來(lái)插入和查詢記錄,則MyISAM引擎能提供較 高的處理效率;如果只是臨時(shí)存放數(shù)據(jù),數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存中的Memory引擎,MySQL中使用該引擎作為臨時(shí)表,存放查詢的中間結(jié)果。如果只有INSERT和SELECT操作,可以選擇Archive引擎,Archive存儲(chǔ)引擎支持高并發(fā)的插 入操作,但是本身并不是事務(wù)安全的。Archive存儲(chǔ)引擎非常適合存儲(chǔ)歸檔數(shù)據(jù),如記錄日志信 息可以使用Archive引擎。

使用哪一種引擎要根據(jù)需要靈活選擇,一個(gè)數(shù)據(jù)庫(kù)中多個(gè)表可以使用不同引擎以滿足各種性能和實(shí)際需求。

使用合適的存儲(chǔ)引擎,將會(huì)提高整個(gè)數(shù)據(jù)庫(kù)的性能。

4、如何查看默認(rèn)存儲(chǔ)引擎?

使用SHOW ENGINES語(yǔ)句查看系統(tǒng)中所有的存儲(chǔ)引擎,其中包括默認(rèn)的存儲(chǔ)引擎。可以看出來(lái)當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)中有五種存儲(chǔ)引擎,默認(rèn)是MyISAM。還可以使用一種直接的方法查看默認(rèn)存儲(chǔ)引擎。執(zhí)行結(jié)果直接顯示了當(dāng)前默認(rèn)的存儲(chǔ)引擎為MyISAM。

5、表刪除操作須謹(jǐn)慎

表刪除操作將把表的定義和表中的數(shù)據(jù)一起刪除,并且MySQL在執(zhí)行刪除操作時(shí),不會(huì)有任何的確認(rèn)信息提示,因此執(zhí)行刪除操時(shí),應(yīng)當(dāng)慎重。在刪除表前,最好對(duì)表中的數(shù)據(jù)進(jìn)行備份,這樣當(dāng)操作失誤時(shí),可以對(duì)數(shù)據(jù)進(jìn)行恢復(fù),以免造成無(wú)法挽回的后果。同樣的,在使用ALTER TABLE進(jìn)行表的基本修改操作時(shí),在執(zhí)行操作過(guò)程之前,也應(yīng)該 確保對(duì)數(shù)據(jù)進(jìn)行完整的備份,因?yàn)閿?shù)據(jù)庫(kù)的改變是無(wú)法撤銷的,如果添加了一個(gè)不需要的字段, 可以將其刪除;相同的,如果刪除了一個(gè)需要的列,該列下面的所有數(shù)據(jù)都將會(huì)丟失。

6、每個(gè)表中都要有一個(gè)主鍵嗎?

并不是每一個(gè)表中都需要主鍵,一般的,如果多個(gè)表之間進(jìn)行連接操作時(shí),需要用到主鍵。因此并不需要為每個(gè)表建立主鍵,而且有些情況最好不使用主鍵。

7、每個(gè)表都可以任意選擇存儲(chǔ)引擎嗎?

外鍵約束(FOREIGN KEY)不能跨引擎使用。MySQL支持多種存儲(chǔ)引擎,每一個(gè)表都可 以指定一個(gè)不同的存儲(chǔ)引擎,但是要注意:外鍵約束是用來(lái)保證數(shù)據(jù)的參照完整性,如果表之間需要關(guān)聯(lián)外鍵,卻指定了不同的存儲(chǔ)引擎,這些表之間是不能創(chuàng)建外鍵約束的。所以說(shuō),存儲(chǔ)引擎的選擇也不完全是隨意的。

8、帶AUTO_INCREMENT約束的字段值是從1開(kāi)始的嗎?

默認(rèn)的,在MySQL中,AUTO_INCREMENT的初始值是1,每新增一條記錄,字段值自動(dòng)加1。設(shè)置自增屬性(AUTO_INCREMENT)的時(shí)候,還可以指定第一條插入記錄的自增字段的 值,這樣新插入的記錄的自增字段值從初始值開(kāi)始遞增,如在tb_emp8中插入第一條記錄,同時(shí)指定id值為5,則以后插入的記錄的id值就會(huì)從6開(kāi)始往上增加。添加唯一性的主鍵約束時(shí),往往需要設(shè)置字段自動(dòng)增加屬性。

9、TIMESTAMP與DATATIME兩者的區(qū)別

TIMESTAMP與DATETIME除了存儲(chǔ)字節(jié)和支持的范圍不同外,還有一個(gè)最大的區(qū)別就是:DATETIME在存儲(chǔ)日期數(shù)據(jù)時(shí),按實(shí)際輸入的格式存儲(chǔ),即輸入什么就存儲(chǔ)什么,與時(shí)區(qū)無(wú)關(guān);而TIMESTAMP值的存儲(chǔ)是以UTC(世界標(biāo)準(zhǔn)時(shí)間)格式保存的,存儲(chǔ)時(shí)對(duì)當(dāng)前時(shí)區(qū)進(jìn)行轉(zhuǎn)換,檢索時(shí)再轉(zhuǎn)換回當(dāng)前時(shí)區(qū)。即查詢時(shí),根據(jù)當(dāng)前時(shí)區(qū)的不同,顯示的時(shí)間值是不同的。

10、選擇數(shù)據(jù)類型的方法和技巧是什么?

MySQL提供了大量的數(shù)據(jù)類型,為了優(yōu)化存儲(chǔ),提高數(shù)據(jù)庫(kù)性能,在任何情況下均應(yīng)使用 最精確的類型。即在所有可以表示該列值的類型中,該類型使用的存儲(chǔ)最少。

整數(shù)和浮點(diǎn)數(shù)

如果不需要小數(shù)部分,則使用整數(shù)來(lái)保存數(shù)據(jù);如果需要表示小數(shù)部分,則使用浮點(diǎn)數(shù)類 型。對(duì)于浮點(diǎn)數(shù)據(jù)列,存入的數(shù)值會(huì)對(duì)該列定義的小數(shù)位進(jìn)行四舍五入。例如如果列的值的范 圍為1?99999,若使用整數(shù),則MEDIUMINT UNSIGNED是最好的類型;若需要存儲(chǔ)小數(shù),則 使用FLOAT類型。浮點(diǎn)類型包括FLOAT和DOUBLE類型。DOUBLE類型精度比FLOAT類型高,因此,如要求存儲(chǔ)精度較高時(shí),應(yīng)選擇DOUBLE類型。

浮點(diǎn)數(shù)和定點(diǎn)數(shù)

浮點(diǎn)數(shù)FLOAT,DOUBLE相對(duì)于定點(diǎn)數(shù)DECIMAL的優(yōu)勢(shì)是:在長(zhǎng)度一定的情況下,浮點(diǎn) 數(shù)能表示更大的數(shù)據(jù)范圍。但是由于浮點(diǎn)數(shù)容易產(chǎn)生誤差,因此對(duì)精確度要求比較高時(shí),建議使 用DECIMAL來(lái)存儲(chǔ)。DECIMAL在MySQL中是以字符串存儲(chǔ)的,用于定義貨幣等對(duì)精確度要 求較高的數(shù)據(jù)。在數(shù)據(jù)遷移中,float(M,D)是非標(biāo)準(zhǔn)SQL定義,數(shù)據(jù)庫(kù)遷移可能會(huì)出現(xiàn)問(wèn)題,最 好不要這樣使用。另外兩個(gè)浮點(diǎn)數(shù)進(jìn)行減法和比較運(yùn)算時(shí)也容易出問(wèn)題,因此在進(jìn)行計(jì)算的時(shí)候, 一定要小心。如果進(jìn)行數(shù)值比較,最好使用DECIMAL類型。

日期與時(shí)間類型

MySQL對(duì)于不同種類的日期和時(shí)間有很多的數(shù)據(jù)類型,比如YEAR和TIME。如果只需要 記錄年份,則使用YEAR類型即可;如果只記錄時(shí)間,只須使用TIME類型。如果同時(shí)需要記錄日期和時(shí)間,則可以使用TIMESTAMP或者DATETIME類型。由于 TIMESTAMP列的取值范圍小于DATETIME的取值范圍,因此存儲(chǔ)范圍較大的日期最好使用 DATETIME。TIMESTAMP也有一個(gè)DATETIME不具備的屬性。默認(rèn)的情況下,當(dāng)插入一條記錄但并沒(méi) 有指定TIMESTAMP這個(gè)列值時(shí),MySQL會(huì)把TIMESTAMP列設(shè)為當(dāng)前的時(shí)間。因此當(dāng)需要插入記錄同時(shí)插入當(dāng)前時(shí)間時(shí),使用TIMESTAMP是方便的,另外TIMESTAMP在空間上比 DATETIME更有效。

CHAR與VARCHAR之間的特點(diǎn)與選擇

CHAR和VARCHAR的區(qū)別:

CHAR是固定長(zhǎng)度字符,VARCHAR是可變長(zhǎng)度字符;CHAR會(huì)自動(dòng)刪除插入數(shù)據(jù)的尾部 空格,VARCHAR不會(huì)刪除尾部空格。

CHAR是固定長(zhǎng)度,所以它的處理速度比VARCHAR的速度要快,但是它的缺點(diǎn)就是浪費(fèi) 存儲(chǔ)空間。所以對(duì)存儲(chǔ)不大,但在速度上有要求的可以使用CHAR類型,反之可以使用 VARCHAR類型來(lái)實(shí)現(xiàn)。

存儲(chǔ)引擎對(duì)于選擇CHAR和VARCHAR的影響:

對(duì)于MyISAM存儲(chǔ)引擎:最好使用固定長(zhǎng)度的數(shù)據(jù)列代替可變長(zhǎng)度的數(shù)據(jù)列。這樣可以使 整個(gè)表靜態(tài)化,從而使數(shù)據(jù)檢索更快,用空間換時(shí)間。

對(duì)于InnoDB存儲(chǔ)引擎:使用可變長(zhǎng)度的數(shù)據(jù)列,因?yàn)镮nnoDB數(shù)據(jù)表的存儲(chǔ)格式不分固定 長(zhǎng)度和可變長(zhǎng)度,因此使用CHAR不一定比使用VARCHAR更好,但由于VARCHAR是按照 實(shí)際的長(zhǎng)度存儲(chǔ),比較節(jié)省空間,所以對(duì)磁盤I/O和數(shù)據(jù)存儲(chǔ)總量比較好。

ENUM 和 SET

ENUM只能取單值,它的數(shù)據(jù)列表是一個(gè)枚舉集合。它的合法取值列表最多允許有65535 個(gè)成員。因此,在需要從多個(gè)值中選取一個(gè)時(shí),可以使用ENUM。比如:性別字段適合定義為ENUM類型,每次只能從’男’或’女’中取一個(gè)值。SET可取多值。它的合法取值列表最多允許有64個(gè)成員。空字符串也是一個(gè)合法的SET值。在需要取多個(gè)值的時(shí)候,適合使用SET類型,比如:要存儲(chǔ)一個(gè)人興趣愛(ài)好,最好使用SET類型。ENUM和SET的值是以字符串形式出現(xiàn)的,但在內(nèi)部,MySQL以數(shù)值的形式存儲(chǔ)它們。

BLOB 和 TEXT BLOB是二進(jìn)制字符串,TEXT是非二進(jìn)制字符串,兩者均可存放大容量的信息。BLOB主 要存儲(chǔ)圖片、音頻信息等,而TEXT只能存儲(chǔ)純文本文件。應(yīng)分清兩者的用途。

11、MySQL中如何使用特殊字符?

諸如單引號(hào)(’),雙引號(hào)(“),反斜線(‘\’)等符號(hào),這些符號(hào)在MySQL中不能直接輸入 使用,否則會(huì)產(chǎn)生意料之外的結(jié)果。在MySQL中,這些特殊字符稱為轉(zhuǎn)義字符,在輸入時(shí)需要 以反斜線符號(hào)(’\’)開(kāi)頭,所以在使用單引號(hào)和雙引號(hào)時(shí)應(yīng)分別輸入(\’)或者(”),輸入反斜線時(shí)應(yīng)該輸入(\),其他特殊字符還有回車符(\r),換行符(\n),制表符(\tab),退格符(\b)等。在向數(shù)據(jù)庫(kù)中插入這些特殊字符時(shí),一定要進(jìn)行轉(zhuǎn)義處理。

12、MySQL中可以存儲(chǔ)文件嗎?

MySQL中的BLOB和TEXT字段類型可以存儲(chǔ)數(shù)據(jù)量較大的文件,可以使用這些數(shù)據(jù)類型 存儲(chǔ)圖像、聲音或者是大容量的文本內(nèi)容,例如網(wǎng)頁(yè)或者文檔。雖然使用BLOB或者TEXT可 以存儲(chǔ)大容量的數(shù)據(jù),但是對(duì)這些字段的處理會(huì)降低數(shù)據(jù)庫(kù)的性能。如果并非必要,可以選擇只 儲(chǔ)存文件的路徑。

13、MySQL中如何執(zhí)行區(qū)分大小寫(xiě)的字符串比較?

在Windows平臺(tái)下,MySQL是不區(qū)分大小的,因此字符串比較函數(shù)也不區(qū)分大小寫(xiě)。如果 想執(zhí)行區(qū)分大小寫(xiě)的比較,可以在字符串前面添加BINARY關(guān)鍵字。例如默認(rèn)情況下,’a’=‘A’ 返回結(jié)果為1,如果使用BINARY關(guān)鍵字,BINARY’a’=‘A’結(jié)果為0,在區(qū)分大小寫(xiě)的情況下,’a’ 與’A’并不相同。

14、如何從日期時(shí)間值中獲取年、月、日等部分日期或時(shí)間值?

MySQL中,日期時(shí)間值以字符串形式存儲(chǔ)在數(shù)據(jù)表中,因此可以使用字符串函數(shù)分別截取日期時(shí)間值的不同部分,例如某個(gè)名稱為dt的字段有值“2010-10-01 12:00:30”,如果只需要獲 得年值,可以輸入LEFT(dt, 4),這樣就獲得了字符串左邊開(kāi)始長(zhǎng)度為4的子字符串,即YEAR 部分的值;如果要獲取月份值,可以輸入MID(dt,6,2),字符串第6個(gè)字符開(kāi)始,長(zhǎng)度為2的子 字符串正好為dt中的月份值。同理,讀者可以根據(jù)其他日期和時(shí)間的位置,計(jì)算并獲取相應(yīng)的值。

15、如何改變默認(rèn)的字符集?

CONVERT()函數(shù)改變指定字符串的默認(rèn)字符集,在開(kāi)始的章節(jié)中,向讀者介紹使用GUI圖形化安裝配置工具進(jìn)行MySQL的安裝和配置,其中的一個(gè)步驟是可以選擇MySQL的默認(rèn)字符集。但是,如果只改變字符集,沒(méi)有必要把配置過(guò)程重新執(zhí)行一遍,在這里,一個(gè)簡(jiǎn)單的方式是 修改配置文件。在Windows中,MySQL配置文件名稱為my.ini,該文件在MySQL的安裝目錄下面。修改配置文件中的default-character-set和character-set-server參數(shù)值,將其改為想要的字 符集名稱,如gbk、gb2312、latinl等,修改完之后重新啟動(dòng)MySQL服務(wù),即可生效。讀者可以在修改字符集時(shí)使用SHOW VARIABLES LIKE ’character_set_°%’;命令查看當(dāng)前字符集,以進(jìn)行對(duì)比。

16、DISTINCT可以應(yīng)用于所有的列嗎?

查詢結(jié)果中,如果需要對(duì)列進(jìn)行降序排序,可以使用DESC,這個(gè)關(guān)鍵字只能對(duì)其前面的列 進(jìn)行降序排列。例如,要對(duì)多列都進(jìn)行降序排序,必須要在每一列的列名后面加DESC關(guān)鍵字。而DISTINCT不同,DISTINCT不能部分使用。換句話說(shuō),DISTINCT關(guān)鍵字應(yīng)用于所有列而不 僅是它后面的第一個(gè)指定列。例如,查詢3個(gè)字段s_id,f_name,f_price,如果不同記錄的這3個(gè)字段的組合值都不同,則所有記錄都會(huì)被查詢出來(lái)。

17、ORDER BY可以和LIMIT混合使用嗎?

在使用ORDER BY子句時(shí),應(yīng)保證其位于FROM子句之后,如果使用LIMIT,則必須位 于ORDER BY之后,如果子句順序不正確,MySQL將產(chǎn)生錯(cuò)誤消息。

18、什么時(shí)候使用引號(hào)?

在查詢的時(shí)候,會(huì)看到在WHERE子句中使用條件,有的值加上了單引號(hào),而有的值未加。單引號(hào)用來(lái)限定字符串,如果將值與字符串類型列進(jìn)行比較,則需要限定引號(hào);而用來(lái)與數(shù)值進(jìn) 行比較則不需要用引號(hào)。

19、在WHERE子句中必須使用圓括號(hào)嗎?

任何時(shí)候使用具有AND和OR操作符的WHERE子句,都應(yīng)該使用圓括號(hào)明確操作順序。如果條件較多,即使能確定計(jì)算次序,默認(rèn)的計(jì)算次序也可能會(huì)使SQL語(yǔ)句不易理解,因此使 用括號(hào)明確操作符的次序,是一個(gè)好的習(xí)慣。

20、更新或者刪除表時(shí)必須指定WHERE子句嗎?

在前面章節(jié)中可以看到,所有的UPDATE和DELETE語(yǔ)句全都在WHERE子句中指定了條 件。如果省略WHERE子句,則UPDATE或DELETE將被應(yīng)用到表中所有的行。因此,除非 確實(shí)打算更新或者刪除所有記錄,否則要注意使用不帶WHERE子句的UPDATE或DELETE 語(yǔ)句。建議在對(duì)表進(jìn)行更新和刪除操作之前,使用SELECT語(yǔ)句確認(rèn)需要?jiǎng)h除的記錄,以免造 成無(wú)法挽回的結(jié)果。

21、索引對(duì)數(shù)據(jù)庫(kù)性能如此重要,應(yīng)該如何使用它?

為數(shù)據(jù)庫(kù)選擇正確的索引是一項(xiàng)復(fù)雜的任務(wù)。如果索引列較少,則需要的磁盤空間和維護(hù)開(kāi)銷 都較少。如果在一個(gè)大表上創(chuàng)建了多種組合索引,索引文件也會(huì)膨脹很快。而另一方面,索引較多 可覆蓋更多的查詢??赡苄枰囼?yàn)若干不同的設(shè)計(jì),才能找到最有效的索引。可以添加、修改和刪 除索引而不影響數(shù)據(jù)庫(kù)架構(gòu)或應(yīng)用程序設(shè)計(jì)。因此,應(yīng)嘗試多個(gè)不同的索引從而建立最優(yōu)的索引。

22、盡量使用短索引。

對(duì)字符串類型的字段進(jìn)行索引,如果可能應(yīng)該指定一個(gè)前綴長(zhǎng)度。例如,如果有一個(gè) CHAR(255)的列,如果在前10個(gè)或30個(gè)字符內(nèi),多數(shù)值是惟一的,則不需要對(duì)整個(gè)列進(jìn)行索引。短索引不僅可以提高查詢速度而且可以節(jié)省磁盤空間、減少I/O操作。

23、MySQL存儲(chǔ)過(guò)程和函數(shù)有什么區(qū)別?

在本質(zhì)上它們都是存儲(chǔ)程序。函數(shù)只能通過(guò)return語(yǔ)句返回單個(gè)值或者表對(duì)象;而存儲(chǔ)過(guò)程 不允許執(zhí)行return,但是可以通過(guò)out參數(shù)返回多個(gè)值。函數(shù)限制比較多,不能用臨時(shí)表,只能用表變量,還有一些函數(shù)都不可用等等;而存儲(chǔ)過(guò)程的限制相對(duì)就比較少。函數(shù)可以嵌入在SQL語(yǔ)句中使用,可以在SELECT語(yǔ)句中作為查詢語(yǔ)句的一個(gè)部分調(diào)用;而存儲(chǔ)過(guò)程一般是作為一個(gè)獨(dú)立的部分來(lái)執(zhí)行。

24、存儲(chǔ)過(guò)程中的代碼可以改變嗎?

目前,MySQL還不提供對(duì)已存在的存儲(chǔ)過(guò)程代碼的修改,如果必須要修改存儲(chǔ)過(guò)程,必須使用DROP語(yǔ)句刪除之后,再重新編寫(xiě)代碼,或者創(chuàng)建一個(gè)新的存儲(chǔ)過(guò)程。

25、存儲(chǔ)過(guò)程中可以調(diào)用其他存儲(chǔ)過(guò)程嗎?

存儲(chǔ)過(guò)程包含用戶定義的SQL語(yǔ)句集合,可以使用CALL語(yǔ)句調(diào)用存儲(chǔ)過(guò)程,當(dāng)然在存儲(chǔ) 過(guò)程中也可以使用CALL語(yǔ)句調(diào)用其他存儲(chǔ)過(guò)程,但是不能使用DROP語(yǔ)句刪除其他存儲(chǔ)過(guò)程。

26、存儲(chǔ)過(guò)程的參數(shù)不要與數(shù)據(jù)表中的字段名相同。

在定義存儲(chǔ)過(guò)程參數(shù)列表時(shí),應(yīng)注意把參數(shù)名與數(shù)據(jù)庫(kù)表中的字段名區(qū)別開(kāi)來(lái),否則將出 現(xiàn)無(wú)法預(yù)期的結(jié)果。

27、存儲(chǔ)過(guò)程的參數(shù)可以使用中文嗎?

一般情況下,可能會(huì)出現(xiàn)存儲(chǔ)過(guò)程中傳入中文參數(shù)的情況,例如某個(gè)存儲(chǔ)過(guò)程根據(jù)用戶的 名字查找該用戶的信息,傳入的參數(shù)值可能是中文。這時(shí)需要在定義存儲(chǔ)過(guò)程的時(shí)候,在后面加 上character set gbk,不然調(diào)用存儲(chǔ)過(guò)程使用中文參數(shù)會(huì)出錯(cuò),比如定義userInfo存儲(chǔ)過(guò)程,代碼 如下:

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)

28、MySQL中視圖和表的區(qū)別以及聯(lián)系是什么?

兩者的區(qū)別:(1)視圖是已經(jīng)編譯好的SQL語(yǔ)句,是基于SQL語(yǔ)句的結(jié)果集的可視化的表,而表不是。

(2)視圖沒(méi)有實(shí)際的物理記錄,而基本表有。

(3)表是內(nèi)容,視圖是窗口。

(4)表占用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時(shí)對(duì)它 進(jìn)行修改,但視圖只能用創(chuàng)建的語(yǔ)句來(lái)修改。

(5)視圖是查看數(shù)據(jù)表的一種方法,可以查詢數(shù)據(jù)表中某些字段構(gòu)成的數(shù)據(jù),只是一些SQL 語(yǔ)句的集合。從安全的角度來(lái)說(shuō),視圖可以防止用戶接觸數(shù)據(jù)表,因而用戶不知道表結(jié)構(gòu)。

(6)表屬于全局模式中的表,是實(shí)表;視圖屬于局部模式的表,是虛表。

(7)視圖的建立和刪除只影響視圖本身,不影響對(duì)應(yīng)的基本表。

兩者的聯(lián)系:

視圖(view)是在基本表之上建立的表,它的結(jié)構(gòu)(即所定義的列)和內(nèi)容(即所有記錄) 都來(lái)自基本表,它依據(jù)基本表存在而存在。一個(gè)視圖可以對(duì)應(yīng)一個(gè)基本表,也可以對(duì)應(yīng)多個(gè)基本表。視圖是基本表的抽象和在邏輯意義上建立的新關(guān)系。

29、使用觸發(fā)器時(shí)須特別注意。

在使用觸發(fā)器的時(shí)候需要注意,對(duì)于相同的表,相同的事件只能創(chuàng)建一個(gè)觸發(fā)器,比如對(duì) 表account創(chuàng)建了一個(gè)BEFORE INSERT觸發(fā)器,那么如果對(duì)表account再次創(chuàng)建一個(gè)BEFORE INSERT觸發(fā)器,MySQL將會(huì)報(bào)錯(cuò),此時(shí),只可以在表account上創(chuàng)建AFTER INSERT或者 BEFORE UPDATE類型的觸發(fā)器。靈活的運(yùn)用觸發(fā)器將為操作省去很多麻煩。

30、及時(shí)刪除不再需要的觸發(fā)器。

觸發(fā)器定義之后,每次執(zhí)行觸發(fā)事件,都會(huì)激活觸發(fā)器并執(zhí)行觸發(fā)器中的語(yǔ)句。如果需求 發(fā)生變化,而觸發(fā)器沒(méi)有進(jìn)行相應(yīng)的改變或者刪除,則觸發(fā)器仍然會(huì)執(zhí)行舊的語(yǔ)句,從而會(huì)影響新的數(shù)據(jù)的完整性。因此,要將不再使用的觸發(fā)器及時(shí)刪除。

31、應(yīng)該使用哪種方法創(chuàng)建用戶?

創(chuàng)建用戶有幾種方法:GRANT語(yǔ)句、CREATE USER語(yǔ)句和直接操作user表。一般情況,最好使用GRANT或者CREATE USER語(yǔ)句,而不要直接將用戶信息插入user表,因?yàn)閡ser表中存儲(chǔ)了全局級(jí)別的權(quán)限以及其他的賬戶信息,如果意外破壞了user表中的記錄,則可能會(huì)對(duì)MySQL服務(wù)器造成很大影響。

32、mysqldump備份的文件只能在MySQL中使用嗎?

mysqldump備份的文本文件實(shí)際是數(shù)據(jù)庫(kù)的一個(gè)副本,使用該文件不僅可以在MySQL中恢復(fù)數(shù)據(jù)庫(kù),而且通過(guò)對(duì)該文件的簡(jiǎn)單修改,可以使用該文件在SQL Server或者Sybase等其他數(shù)據(jù)庫(kù)中恢復(fù)數(shù)據(jù)庫(kù)。這在某種程度上實(shí)現(xiàn)了數(shù)據(jù)庫(kù)之間的遷移。

33、如何選擇備份工具?

直接復(fù)制數(shù)據(jù)文件是最為直接、快速的備份方法,但缺點(diǎn)是基本上不能實(shí)現(xiàn)增量備份。備 份時(shí)必須確保沒(méi)有使用這些表。如果在復(fù)制一個(gè)表的同時(shí)服務(wù)器正在修改它,則復(fù)制無(wú)效。備份 文件時(shí),最好關(guān)閉服務(wù)器,然后重新啟動(dòng)0000000000000002222服務(wù)器。為了保證數(shù)據(jù)的一致性,需要在備份文件前, 執(zhí)行以下SQL語(yǔ)句:

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)

目錄下即可。mysqlhotcopy 是一個(gè) PERL 程序,它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp來(lái)快速備份數(shù)據(jù)庫(kù)。它是備份數(shù)據(jù)庫(kù)或單個(gè)表的最快的途徑,但它只能運(yùn)行在數(shù)據(jù)庫(kù)文件所在的 機(jī)器上,并且mysqlhotcopy只能用于備份MyISAM表。mysqlhotcopy適合于小型數(shù)據(jù)庫(kù)的備份,數(shù)據(jù)量不大,可以使用mysqlhotcopy程序每天進(jìn)行一次完全備份。

mysqldump將數(shù)據(jù)表導(dǎo)成SQL腳本文件,在不同的MySQL版本之間升級(jí)時(shí)相對(duì)比較合適,這也是最常用的備份方法。mysqldump比直接復(fù)制要慢些。也就是把內(nèi)存中的數(shù)據(jù)都刷新到磁盤中,同時(shí)鎖定數(shù)據(jù)表,以保證復(fù)制過(guò)程中不會(huì)有新的 數(shù)據(jù)寫(xiě)入。這種方法備份出來(lái)的數(shù)據(jù)恢復(fù)也很簡(jiǎn)單,直接復(fù)制回原來(lái)的數(shù)據(jù)庫(kù)

34、平時(shí)應(yīng)該打開(kāi)哪些日志?

日志既會(huì)影響MySQL的性能,又會(huì)占用大量磁盤空間。因此,如果不必要,應(yīng)盡可能少地 開(kāi)啟日志。根據(jù)不同的使用環(huán)境,可以考慮開(kāi)啟不同的日志。例如,在開(kāi)發(fā)環(huán)境中優(yōu)化查詢效率低的語(yǔ)句,可以開(kāi)啟慢查詢?nèi)罩?如果需要記錄用戶的所有查詢操作,可以開(kāi)啟通用查詢?nèi)罩?如果需要記錄數(shù)據(jù)的變更,可以開(kāi)啟二進(jìn)制日志;錯(cuò)誤日志是默認(rèn)開(kāi)啟的。

35、如何使用二進(jìn)制日志?

二進(jìn)制日志主要用來(lái)記錄數(shù)據(jù)變更。如果需要記錄數(shù)據(jù)庫(kù)的變化,可以開(kāi)啟二進(jìn)制日志?;诙M(jìn)制日志的特性,不僅可以用來(lái)進(jìn)行數(shù)據(jù)恢復(fù),還可用于數(shù)據(jù)復(fù)制。在數(shù)據(jù)庫(kù)定期備份的 情況下,如果出現(xiàn)數(shù)據(jù)丟失,可以先用備份恢復(fù)大部分?jǐn)?shù)據(jù),然后使用二進(jìn)制日志恢復(fù)最近備份后變更的數(shù)據(jù)。在雙機(jī)熱備情況下,可以使用MySQL的二進(jìn)制日志記錄數(shù)據(jù)的變更,然后將變更部分復(fù)制到備份服務(wù)器上。

36、如何使用慢查詢?nèi)罩荆?/p>

慢查詢?nèi)罩局饕脕?lái)記錄查詢時(shí)間較長(zhǎng)的日志。在開(kāi)發(fā)環(huán)境下,可以開(kāi)啟慢查詢?nèi)罩緛?lái)記 錄查詢時(shí)間較長(zhǎng)的查詢語(yǔ)句,然后對(duì)這些語(yǔ)句進(jìn)行優(yōu)化。通過(guò)配long_query_time的值,可以靈活地掌握不同程度的慢查詢語(yǔ)句。

37、是不是索引建立得越多越好?

合理的索引可以提高查詢的速度,但不是索引越多越好。在執(zhí)行插入語(yǔ)句的時(shí)候,MySQL 要為新插入的記錄建立索引。所以過(guò)多的索引會(huì)導(dǎo)致插入操作變慢。原則上是只有查詢用的字段 才建立索引。

38、如何使用查詢緩沖區(qū)?

查詢緩沖區(qū)可以提高查詢的速度,但是這種方式只適合查詢語(yǔ)句比較多、更新語(yǔ)句比較少 的情況。默認(rèn)情況下查詢緩沖區(qū)的大小為〇,也就是不可用。可以修改queiy_cache_size以調(diào)整 查詢緩沖區(qū)大小;修改query_cache_type以調(diào)整查詢緩沖區(qū)的類型。在my.ini中修改 query_cache_size 和 query_cache_type的值如下所示:

表示開(kāi)啟查詢緩沖區(qū)。只有在查詢語(yǔ)句中包含SQL_NO_CACHE關(guān)鍵字 時(shí),才不會(huì)使用查詢緩沖區(qū)??梢允褂肍LUSH QUERY CACHE語(yǔ)句來(lái)刷新緩沖區(qū),清理查詢緩 沖區(qū)中的碎片。
責(zé)編AJX

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3752

    瀏覽量

    64229
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    561

    瀏覽量

    24671
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    797

    瀏覽量

    26399
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview有調(diào)用mysql數(shù)據(jù)庫(kù)問(wèn)題????

    labview有調(diào)用mysql數(shù)據(jù)庫(kù),請(qǐng)問(wèn)labview打包成exe安裝檔,怎么把mysql數(shù)據(jù)庫(kù)打包進(jìn)來(lái),是mysql
    發(fā)表于 05-19 16:17

    mysql數(shù)據(jù)庫(kù)發(fā)展流程概述

    mysql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)
    發(fā)表于 07-15 11:26

    MySQL數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)

    撩課-MySQL第1部分數(shù)據(jù)庫(kù)簡(jiǎn)介
    發(fā)表于 08-12 14:17

    mysql數(shù)據(jù)庫(kù)操作指南

    mysql數(shù)據(jù)庫(kù)sql語(yǔ)句基礎(chǔ)知識(shí)
    發(fā)表于 09-18 09:06

    數(shù)據(jù)庫(kù)教程之PHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)的理論知識(shí)詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)教程之PHP訪問(wèn)MySQL數(shù)據(jù)庫(kù)的理論知識(shí)詳細(xì)說(shuō)明包括了:1.phpMyAdmin的安裝和使用,2.PHP操作數(shù)據(jù)
    發(fā)表于 06-17 17:06 ?15次下載

    告訴你38個(gè)MySQL數(shù)據(jù)庫(kù)的小技巧!

    無(wú)論是運(yùn)維、開(kāi)發(fā)、測(cè)試,還是架構(gòu)師,數(shù)據(jù)庫(kù)技術(shù)是一個(gè)必備加薪神器,那么,一直說(shuō)學(xué)習(xí)數(shù)據(jù)庫(kù)、學(xué)MySQL,到底是要學(xué)習(xí)它的哪些東西呢? 1、如
    發(fā)表于 03-21 15:00 ?696次閱讀

    MySQL數(shù)據(jù)庫(kù)如何安裝和使用說(shuō)明

    MySQL數(shù)據(jù)庫(kù)開(kāi)發(fā) 基礎(chǔ)概念 1.數(shù)據(jù):描述事物特征的符號(hào),屬性 2.數(shù)據(jù)庫(kù)的概念:管理計(jì)算機(jī)中的數(shù)據(jù)的倉(cāng)庫(kù) 2.
    的頭像 發(fā)表于 02-13 16:13 ?2755次閱讀

    干貨:20個(gè)MySQL開(kāi)源數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)原則

    干貨:20個(gè)MySQL開(kāi)源數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)原則
    的頭像 發(fā)表于 08-28 10:57 ?3349次閱讀

    華為云數(shù)據(jù)庫(kù)-RDS for MySQL數(shù)據(jù)庫(kù)

    (for MySQL)為輔。 MySQL數(shù)據(jù)庫(kù)是全球最受歡迎的一種數(shù)據(jù)庫(kù),它是屬于 Oracle旗下的一款產(chǎn)品,MySQL是一種關(guān)系型
    的頭像 發(fā)表于 10-27 11:06 ?1456次閱讀

    MySQL數(shù)據(jù)庫(kù)服務(wù)器、數(shù)據(jù)庫(kù)和表之間是什么關(guān)系

    數(shù)據(jù)庫(kù)服務(wù)器:MySQL安裝后,會(huì)成為一個(gè)windows服務(wù),這個(gè)windows服務(wù)可以看做是數(shù)據(jù)庫(kù)服務(wù)器。用CMD登錄MySQL,此時(shí)CM
    的頭像 發(fā)表于 01-31 14:59 ?1152次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>服務(wù)器、<b class='flag-5'>數(shù)據(jù)庫(kù)</b>和表之間是什么關(guān)系

    MySQL數(shù)據(jù)庫(kù)管理與應(yīng)用

    討論MySQL數(shù)據(jù)庫(kù)的管理和應(yīng)用。 管理MySQL數(shù)據(jù)庫(kù) 在管理MySQL數(shù)據(jù)庫(kù)之前,我們需要了
    的頭像 發(fā)表于 08-28 17:15 ?923次閱讀

    mysql是一個(gè)什么類型的數(shù)據(jù)庫(kù)

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),用于存儲(chǔ)和管理大量結(jié)構(gòu)化數(shù)據(jù)。它被廣泛用于各種應(yīng)用程序和網(wǎng)站的后端,包括電子商務(wù)平臺(tái)、社交媒體網(wǎng)站、金融系統(tǒng)等等。MySQL的特點(diǎn)是
    的頭像 發(fā)表于 11-16 14:43 ?1646次閱讀

    MySQL數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)

    的基礎(chǔ)知識(shí),包括其架構(gòu)、數(shù)據(jù)類型、表操作、查詢語(yǔ)句和數(shù)據(jù)導(dǎo)入導(dǎo)出等方面。 MySQL 數(shù)據(jù)庫(kù)架構(gòu) MyS
    的頭像 發(fā)表于 11-21 11:09 ?926次閱讀

    mysql數(shù)據(jù)庫(kù)基礎(chǔ)命令

    MySQL是一個(gè)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),經(jīng)常用于存儲(chǔ)、管理和操作數(shù)據(jù)。在本文中,我們將詳細(xì)介紹MySQL的基礎(chǔ)命令,并提供與每個(gè)命令相關(guān)
    的頭像 發(fā)表于 12-06 10:56 ?529次閱讀

    mysql怎么新建一個(gè)數(shù)據(jù)庫(kù)

    mysql怎么新建一個(gè)數(shù)據(jù)庫(kù) 如何新建一個(gè)數(shù)據(jù)庫(kù)MySQL中 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)MySQL中的基
    的頭像 發(fā)表于 12-28 10:01 ?836次閱讀