大牛解析如何快速學習MySQL數(shù)據(jù)庫秘籍

無論是運維、開發(fā)窖式、測試蚁飒,還是架構(gòu)師,數(shù)據(jù)庫技術(shù)是一個必備加薪神器萝喘,那么淮逻,一直說學習數(shù)據(jù)庫、學MySQL阁簸,到底是要學習它的哪些東西呢爬早?此文為你揭曉,你值得一看启妹!

1.如何快速掌握MySQL?

⑴培養(yǎng)興趣

興趣是最好的老師筛严,不論學習什么知識,興趣都可以極大地提高學習效率饶米。當然學習MySQL 5.6也不例外桨啃。

⑵夯實基礎(chǔ)

計算機領(lǐng)域的技術(shù)非常強調(diào)基礎(chǔ),剛開始學習可能還認識不到這一點檬输,隨著技術(shù)應(yīng)用的深 入照瘾,只有有著扎實的基礎(chǔ)功底,才能在技術(shù)的道路上走得更快褪猛、更遠网杆。對于MySQL的學習來說羹饰, SQL語句是其中最為基礎(chǔ)的部分伊滋,很多操作都是通過SQL語句來實現(xiàn)的。所以在學習的過程中队秩, 讀者要多編寫SQL語句笑旺,對于同一個功能,使用不同的實現(xiàn)語句來完成馍资,從而深刻理解其不同之處筒主。

(3)及時學習新知識

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

⑷多實踐操作

數(shù)據(jù)庫系統(tǒng)具有極強的操作性熊经,需要多動手上機操作泽艘。在實際操作的過程中才能發(fā)現(xiàn)問題欲险, 并思考解決問題的方法和思路,只有這樣才能提高實戰(zhàn)的操作能力匹涮。

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

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

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

3個選項的具體含義如下雳攘。

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

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

(3) DedicatedMySQL Server Machine (專用 MySQL 服務(wù)器):該選項代表只運行MySQL服務(wù)的服務(wù)器繁莹。假定運行沒有運行其它應(yīng)用程序檩互。MySQL服務(wù)器配置成使用所有可用系統(tǒng)資源。作為初學者咨演,建議選擇【DevelopmentMachine】(開發(fā)者機器)選項闸昨,這樣占用系統(tǒng)的資源 比較少。

3.如何選擇存儲引擎

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

1遭赂、首先需 要考慮每一個存儲引擎提供了哪些不同的功能循诉。如果要提供提交,回滾和崩潰恢復(fù)能力的事務(wù)安全(ACID兼容)能力撇他,并要求實現(xiàn)并發(fā)控 制茄猫,InnoDB是個很好的選擇。如果數(shù)據(jù)表主要用來插入和查詢記錄困肩,則MyISAM引擎能提供較 高的處理效率划纽;如果只是臨時存放數(shù)據(jù),數(shù)據(jù)量不大锌畸,并且不需要較高的數(shù)據(jù)安全性勇劣,可以選擇將數(shù)據(jù)保存在內(nèi)存中的Memory引擎,MySQL中使用該引擎作為臨時表蹋绽,存放查詢的中間結(jié)果芭毙。如果只有INSERT和SELECT操作筋蓖,可以選擇Archive引擎,Archive存儲引擎支持高并發(fā)的插 入操作退敦,但是本身并不是事務(wù)安全的粘咖。Archive存儲引擎非常適合存儲歸檔數(shù)據(jù),如記錄日志信 息可以使用Archive引擎侈百。

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

3讽坏、使用合適的存儲引擎,將會提高整個數(shù)據(jù)庫的性能例证。

4.如何查看默認存儲引擎路呜?

使用SHOW ENGINES語句查看系統(tǒng)中所有的存儲引擎,其中包括默認的存儲引擎织咧≌痛校可以看出來當前數(shù)據(jù)庫系統(tǒng)中有五種存儲引擎,默認是MyISAM笙蒙。還可以使用一種直接的方法查看默認存儲引擎抵屿。執(zhí)行結(jié)果直接顯示了當前默認的存儲引擎為MyISAM。

5.表刪除操作須謹慎捅位。

表刪除操作將把表的定義和表中的數(shù)據(jù)一起刪除轧葛,并且MySQL在執(zhí)行刪除操作時,不會有 任何的確認信息提示艇搀,因此執(zhí)行刪除操時尿扯,應(yīng)當慎重。在刪除表前中符,最好對表中的數(shù)據(jù)進行備份姜胖, 這樣當操作失誤時,可以對數(shù)據(jù)進行恢復(fù)淀散,以免造成無法挽回的后果。同樣的蚜锨,在使用ALTER TABLE進行表的基本修改操作時档插,在執(zhí)行操作過程之前,也應(yīng)該 確保對數(shù)據(jù)進行完整的備份亚再,因為數(shù)據(jù)庫的改變是無法撤銷的郭膛,如果添加了一個不需要的字段, 可以將其刪除氛悬;相同的则剃,如果刪除了一個需要的列耘柱,該列下面的所有數(shù)據(jù)都將會丟失。

6.每個表中都要有一個主鍵嗎棍现?

并不是每一個表中都需要主鍵调煎,一般的,如果多個表之間進行連接操作時己肮,需要用到主鍵士袄。 因此并不需要為每個表建立主鍵,而且有些情況最好不使用主鍵谎僻。

7.每個表都可以任意選擇存儲引擎嗎娄柳?

外鍵約束(FOREIGN KEY)不能跨引擎使用培己。MySQL支持多種存儲引擎劫瞳,每一個表都可 以指定一個不同的存儲引擎瞎抛,但是要注意:外鍵約束是用來保證數(shù)據(jù)的參照完整性费什,如果表之間 需要關(guān)聯(lián)外鍵箩兽,卻指定了不同的存儲引擎肢础,這些表之間是不能創(chuàng)建外鍵約束的音瓷。所以說姓迅,存儲引 擎的選擇也不完全是隨意的般甲。

8.帶AUTO_INCREMENT約束的字段值是從1開始的嗎肋乍?

默認的,在MySQL中敷存,AUTO_INCREMENT的初始值是1墓造,每新增一條記錄,字段值自動加1锚烦。設(shè)置自增屬性(AUTO_INCREMENT)的時候觅闽,還可以指定第一條插入記錄的自增字段的 值,這樣新插入的記錄的自增字段值從初始值開始遞增涮俄,如在tb_emp8中插入第一條記錄蛉拙,同時 指定id值為5,則以后插入的記錄的id值就會從6開始往上增加。添加唯一性的主鍵約束時彻亲, 往往需要設(shè)置字段自動增加屬性孕锄。

9.帶AUTO_INCREMENT約束的字段值是從1開始的嗎?

TIMESTAMP與DATETIME除了存儲字節(jié)和支持的范圍不同外苞尝,還有一個最大的區(qū)別就是: DATETIME在存儲日期數(shù)據(jù)時畸肆,按實際輸入的格式存儲,即輸入什么就存儲什么宙址,與時區(qū)無關(guān)轴脐; 而TIMESTAMP值的存儲是以UTC(世界標準時間)格式保存的,存儲時對當前時區(qū)進行轉(zhuǎn)換, 檢索時再轉(zhuǎn)換回當前時區(qū)大咱。即查詢時恬涧,根據(jù)當前時區(qū)的不同,顯示的時間值是不同的碴巾。

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

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

1.整數(shù)和浮點數(shù)

如果不需要小數(shù)部分,則使用整數(shù)來保存數(shù)據(jù)欺抗;如果需要表示小數(shù)部分售碳,則使用浮點數(shù)類 型。對于浮點數(shù)據(jù)列绞呈,存入的數(shù)值會對該列定義的小數(shù)位進行四舍五入贸人。例如如果列的值的范 圍為1?99999,若使用整數(shù)佃声,則MEDIUMINT UNSIGNED是最好的類型艺智;若需要存儲小數(shù),則 使用FLOAT類型圾亏。浮點類型包括FLOAT和DOUBLE類型十拣。DOUBLE類型精度比FLOAT類型高,因此志鹃,如要求存儲精度較高時夭问,應(yīng)選擇DOUBLE類型。

2.浮點數(shù)和定點數(shù)

浮點數(shù)FLOAT曹铃,DOUBLE相對于定點數(shù)DECIMAL的優(yōu)勢是:在長度一定的情況下缰趋,浮點 數(shù)能表示更大的數(shù)據(jù)范圍。但是由于浮點數(shù)容易產(chǎn)生誤差陕见,因此對精確度要求比較高時秘血,建議使 用DECIMAL來存儲。DECIMAL在MySQL中是以字符串存儲的淳玩,用于定義貨幣等對精確度要 求較高的數(shù)據(jù)直撤。在數(shù)據(jù)遷移中,float(M,D)是非標準SQL定義蜕着,數(shù)據(jù)庫遷移可能會出現(xiàn)問題,最 好不要這樣使用。另外兩個浮點數(shù)進行減法和比較運算時也容易出問題承匣,因此在進行計算的時候蓖乘, 一定要小心。如果進行數(shù)值比較韧骗,最好使用DECIMAL類型嘉抒。

3.日期與時間類型

MySQL對于不同種類的日期和時間有很多的數(shù)據(jù)類型,比如YEAR和TIME袍暴。如果只需要 記錄年份些侍,則使用YEAR類型即可;如果只記錄時間政模,只須使用TIME類型岗宣。如果同時需要記錄日期和時間,則可以使用TIMESTAMP或者DATETIME類型淋样。由于 TIMESTAMP列的取值范圍小于DATETIME的取值范圍耗式,因此存儲范圍較大的日期最好使用 DATETIME。TIMESTAMP也有一個DATETIME不具備的屬性趁猴。默認的情況下刊咳,當插入一條記錄但并沒 有指定TIMESTAMP這個列值時,MySQL會把TIMESTAMP列設(shè)為當前的時間儡司。因此當需要 插入記錄同時插入當前時間時娱挨,使用TIMESTAMP是方便的,另外TIMESTAMP在空間上比 DATETIME更有效捕犬。

4.CHAR與VARCHAR之間的特點與選擇

CHAR和VARCHAR的區(qū)別:

CHAR是固定長度字符跷坝,VARCHAR是可變長度字符;CHAR會自動刪除插入數(shù)據(jù)的尾部 空格或听,VARCHAR不會刪除尾部空格探孝。

CHAR是固定長度,所以它的處理速度比VARCHAR的速度要快誉裆,但是它的缺點就是浪費 存儲空間顿颅。所以對存儲不大,但在速度上有要求的可以使用CHAR類型足丢,反之可以使用 VARCHAR類型來實現(xiàn)粱腻。

存儲引擎對于選擇CHAR和VARCHAR的影響:

對于MyISAM存儲引擎:最好使用固定長度的數(shù)據(jù)列代替可變長度的數(shù)據(jù)列。這樣可以使 整個表靜態(tài)化斩跌,從而使數(shù)據(jù)檢索更快绍些,用空間換時間。

對于InnoDB存儲引擎:使用可變長度的數(shù)據(jù)列耀鸦,因為InnoDB數(shù)據(jù)表的存儲格式不分固定 長度和可變長度柬批,因此使用CHAR不一定比使用VARCHAR更好啸澡,但由于VARCHAR是按照 實際的長度存儲,比較節(jié)省空間氮帐,所以對磁盤I/O和數(shù)據(jù)存儲總量比較好嗅虏。

5.ENUM 和 SET

ENUM只能取單值,它的數(shù)據(jù)列表是一個枚舉集合上沐。它的合法取值列表最多允許有65 535 個成員皮服。因此,在需要從多個值中選取一個時参咙,可以使用ENUM龄广。比如:性別字段適合定義為 ENUM類型,每次只能從’男’或’女’中取一個值蕴侧。SET可取多值择同。它的合法取值列表最多允許有64個成員「暧空字符串也是一個合法的SET值奠衔。 在需要取多個值的時候,適合使用SET類型塘娶,比如:要存儲一個人興趣愛好归斤,最好使用SET類型。ENUM和SET的值是以字符串形式出現(xiàn)的刁岸,但在內(nèi)部脏里,MySQL以數(shù)值的形式存儲它們。

6.BLOB 和 TEXT

BLOB是二進制字符串虹曙,TEXT是非二進制字符串迫横,兩者均可存放大容量的信息。BLOB主 要存儲圖片酝碳、音頻信息等矾踱,而TEXT只能存儲純文本文件。應(yīng)分清兩者的用途疏哗。

11.MySQL中如何使用特殊字符呛讲?

諸如單引號(’),雙引號(")返奉,反斜線()等符號贝搁,這些符號在MySQL中不能直接輸入 使用,否則會產(chǎn)生意料之外的結(jié)果芽偏。在MySQL中雷逆,這些特殊字符稱為轉(zhuǎn)義字符,在輸入時需要 以反斜線符號(’’)開頭污尉,所以在使用單引號和雙引號時應(yīng)分別輸入(’)或者(")膀哲,輸入反 斜線時應(yīng)該輸入()往产,其他特殊字符還有回車符( ),換行符( )等太,制表符(ab)捂齐,退格 符()等蛮放。在向數(shù)據(jù)庫中插入這些特殊字符時缩抡,一定要進行轉(zhuǎn)義處理。

12.MySQL中可以存儲文件嗎包颁?

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

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

在Windows平臺下呵俏,MySQL是不區(qū)分大小的,因此字符串比較函數(shù)也不區(qū)分大小寫滔灶。如果 想執(zhí)行區(qū)分大小寫的比較普碎,可以在字符串前面添加BINARY關(guān)鍵字。例如默認情況下录平,’a’=‘A’ 返回結(jié)果為1麻车,如果使用BINARY關(guān)鍵字,BINARY’a’=‘A’結(jié)果為0,在區(qū)分大小寫的情況下斗这,’a’ 與’A’并不相同动猬。

14.如何從日期時間值中獲取年、月表箭、日等部分日期或時間值赁咙?

MySQL中,日期時間值以字符串形式存儲在數(shù)據(jù)表中燃逻,因此可以使用字符串函數(shù)分別截取日期時間值的不同部分序目,例如某個名稱為dt的字段有值“2010-10-01 12:00:30”,如果只需要獲 得年值伯襟,可以輸入LEFT(dt, 4)猿涨,這樣就獲得了字符串左邊開始長度為4的子字符串,即YEAR 部分的值姆怪;如果要獲取月份值叛赚,可以輸入MID(dt,6,2)澡绩,字符串第6個字符開始,長度為2的子 字符串正好為dt中的月份值俺附。同理肥卡,讀者可以根據(jù)其他日期和時間的位置,計算并獲取相應(yīng)的值事镣。

15.如何改變默認的字符集步鉴?

CONVERT()函數(shù)改變指定字符串的默認字符集,在開始的章節(jié)中璃哟,向讀者介紹使用GUI圖形化安裝配置工具進行MySQL的安裝和配置氛琢,其中的一個步驟是可以選擇MySQL的默認字符集。但是随闪,如果只改變字符集阳似,沒有必要把配置過程重新執(zhí)行一遍,在這里铐伴,一個簡單的方式是 修改配置文件撮奏。在Windows中,MySQL配置文件名稱為my.ini当宴,該文件在MySQL的安裝目錄下面畜吊。修改配置文件中的default-character-set和character-set-server參數(shù)值,將其改為想要的字 符集名稱即供,如gbk定拟、gb2312、latinl等逗嫡,修改完之后重新啟動MySQL服務(wù)青自,即可生效。讀者可以在修改字符集時使用SHOW VARIABLES LIKE ’character_set_°%’;命令查看當前字符集驱证,以進行對比延窜。

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

查詢結(jié)果中抹锄,如果需要對列進行降序排序逆瑞,可以使用DESC,這個關(guān)鍵字只能對其前面的列 進行降序排列伙单。例如获高,要對多列都進行降序排序,必須要在每一列的列名后面加DESC關(guān)鍵字吻育。 而DISTINCT不同念秧,DISTINCT不能部分使用。換句話說布疼,DISTINCT關(guān)鍵字應(yīng)用于所有列而不 僅是它后面的第一個指定列摊趾。例如币狠,查詢3個字段s_id,f_name砾层,f_price漩绵,如果不同記錄的這3個字段的組合值都不同,則所有記錄都會被查詢出來肛炮。

17.ORDER BY可以和LIMIT混合使用嗎止吐?

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

18.什么時候使用引號颤芬?

在查詢的時候悲幅,會看到在WHERE子句中使用條件,有的值加上了單引號站蝠,而有的值未加汰具。 單引號用來限定字符串,如果將值與字符串類型列進行比較菱魔,則需要限定引號留荔;而用來與數(shù)值進 行比較則不需要用引號。

19.在WHERE子句中必須使用圓括號嗎澜倦?

任何時候使用具有AND和OR操作符的WHERE子句聚蝶,都應(yīng)該使用圓括號明確操作順序。 如果條件較多藻治,即使能確定計算次序碘勉,默認的計算次序也可能會使SQL語句不易理解,因此使 用括號明確操作符的次序桩卵,是一個好的習慣验靡。

20.更新或者刪除表時必須指定WHERE子句嗎?

在前面章節(jié)中可以看到雏节,所有的UPDATE和DELETE語句全都在WHERE子句中指定了條 件胜嗓。如果省略WHERE子句,則UPDATE或DELETE將被應(yīng)用到表中所有的行钩乍。因此辞州,除非 確實打算更新或者刪除所有記錄,否則要注意使用不帶WHERE子句的UPDATE或DELETE 語句件蚕。建議在對表進行更新和刪除操作之前孙技,使用SELECT語句確認需要刪除的記錄产禾,以免造 成無法挽回的結(jié)果。

21.索引對數(shù)據(jù)庫性能如此重要牵啦,應(yīng)該如何使用它亚情?

為數(shù)據(jù)庫選擇正確的索引是一項復(fù)雜的任務(wù)。如果索引列較少哈雏,則需要的磁盤空間和維護開銷 都較少楞件。如果在一個大表上創(chuàng)建了多種組合索引,索引文件也會膨脹很快裳瘪。而另一方面土浸,索引較多 可覆蓋更多的查詢∨砀可能需要試驗若干不同的設(shè)計黄伊,才能找到最有效的索引∨梢螅可以添加还最、修改和刪 除索引而不影響數(shù)據(jù)庫架構(gòu)或應(yīng)用程序設(shè)計。因此毡惜,應(yīng)嘗試多個不同的索引從而建立最優(yōu)的索引拓轻。

22.盡量使用短索引。

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

23. MySQL存儲過程和函數(shù)有什么區(qū)別危纫?

在本質(zhì)上它們都是存儲程序宗挥。函數(shù)只能通過return語句返回單個值或者表對象;而存儲過程 不允許執(zhí)行return种蝶,但是可以通過out參數(shù)返回多個值契耿。函數(shù)限制比較多,不能用臨時表螃征,只能用表變量搪桂,還有一些函數(shù)都不可用等等;而存儲過程的限制相對就比較少。函數(shù)可以嵌入在SQL 語句中使用踢械,可以在SELECT語句中作為查詢語句的一個部分調(diào)用酗电;而存儲過程一般是作為一個獨立的部分來執(zhí)行。

24.存儲過程中的代碼可以改變嗎内列?

目前撵术,MySQL還不提供對已存在的存儲過程代碼的修改,如果必須要修改存儲過程话瞧,必須使用DROP語句刪除之后嫩与,再重新編寫代碼,或者創(chuàng)建一個新的存儲過程交排。

25.存儲過程中可以調(diào)用其他存儲過程嗎划滋?

存儲過程包含用戶定義的SQL語句集合,可以使用CALL語句調(diào)用存儲過程埃篓,當然在存儲 過程中也可以使用CALL語句調(diào)用其他存儲過程处坪,但是不能使用DROP語句刪除其他存儲過程。

26.存儲過程的參數(shù)不要與數(shù)據(jù)表中的字段名相同都许。

在定義存儲過程參數(shù)列表時稻薇,應(yīng)注意把參數(shù)名與數(shù)據(jù)庫表中的字段名區(qū)別開來,否則將出 現(xiàn)無法預(yù)期的結(jié)果胶征。

27.存儲過程的參數(shù)可以使用中文嗎?

一般情況下桨仿,可能會出現(xiàn)存儲過程中傳入中文參數(shù)的情況睛低,例如某個存儲過程根據(jù)用戶的 名字查找該用戶的信息,傳入的參數(shù)值可能是中文服傍。這時需要在定義存儲過程的時候钱雷,在后面加 上character set gbk,不然調(diào)用存儲過程使用中文參數(shù)會出錯,比如定義userInfo存儲過程吹零,代碼 如下:

1.兩者的區(qū)別:28.MySQL中視圖和表的區(qū)別以及聯(lián)系是什么罩抗?

(1)視圖是已經(jīng)編譯好的SQL語句,是基于SQL語句的結(jié)果集的可視化的表灿椅,而表不是套蒂。

(2)視圖沒有實際的物理記錄,而基本表有茫蛹。

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

(4)表占用物理空間而視圖不占用物理空間婴洼,視圖只是邏輯概念的存在骨坑,表可以及時對它 進行修改,但視圖只能用創(chuàng)建的語句來修改柬采。

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

(6)表屬于全局模式中的表亡脸,是實表押搪;視圖屬于局部模式的表,是虛表浅碾。

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

2.兩者的聯(lián)系:

視圖(view)是在基本表之上建立的表垂谢,它的結(jié)構(gòu)(即所定義的列)和內(nèi)容(即所有記錄) 都來自基本表厦画,它依據(jù)基本表存在而存在。一個視圖可以對應(yīng)一個基本表滥朱,也

可以對應(yīng)多個基本 表根暑。視圖是基本表的抽象和在邏輯意義上建立的新關(guān)系。

28.使用觸發(fā)器時須特別注意徙邻。

在使用觸發(fā)器的時候需要注意排嫌,對于相同的表,相同的事件只能創(chuàng)建一個觸發(fā)器缰犁,比如對 表account創(chuàng)建了一個BEFORE INSERT觸發(fā)器淳地,那么如果對表account再次創(chuàng)建一個BEFORE INSERT觸發(fā)器,MySQL將會報錯帅容,此時颇象,只可以在表account上創(chuàng)建AFTER INSERT或者 BEFORE UPDATE類型的觸發(fā)器。靈活的運用觸發(fā)器將為操作省去很多麻煩并徘。

29.及時刪除不再需要的觸發(fā)器遣钳。

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

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

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

31.mysqldump備份的文件只能在MySQL中使用嗎砂竖?

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

32.如何選擇備份工具置济?

直接復(fù)制數(shù)據(jù)文件是最為直接、快速的備份方法锋八,但缺點是基本上不能實現(xiàn)增量備份浙于。備 份時必須確保沒有使用這些表。如果在復(fù)制一個表的同時服務(wù)器正在修改它挟纱,則復(fù)制無效羞酗。備份 文件時,最好關(guān)閉服務(wù)器紊服,然后重新啟動服務(wù)器整慎。為了保證數(shù)據(jù)的一致性,需要在備份文件前围苫, 執(zhí)行以下SQL語句:

目錄下即可。mysqlhotcopy 是一個 PERL 程序撤师,它使用 LOCK TABLES剂府、FLUSH TABLES 和 cp 或 scp來快速備份數(shù)據(jù)庫。它是備份數(shù)據(jù)庫或單個表的最快的途徑剃盾,但它只能運行在數(shù)據(jù)庫文件所在的 機器上腺占,并且mysqlhotcopy只能用于備份MyISAM表。mysqlhotcopy適合于小型數(shù)據(jù)庫的備份痒谴, 數(shù)據(jù)量不大衰伯,可以使用mysqlhotcopy程序每天進行一次完全備份。mysqldump將數(shù)據(jù)表導成SQL腳本文件积蔚,在不同的MySQL版本之間升級時相對比較合適意鲸, 這也是最常用的備份方法。mysqldump比直接復(fù)制要慢些。也就是把內(nèi)存中的數(shù)據(jù)都刷新到磁盤中怎顾,同時鎖定數(shù)據(jù)表读慎,以保證復(fù)制過程中不會有新的 數(shù)據(jù)寫入。這種方法備份出來的數(shù)據(jù)恢復(fù)也很簡單槐雾,直接復(fù)制回原來的數(shù)據(jù)庫

33.平時應(yīng)該打開哪些日志夭委?

日志既會影響MySQL的性能,又會占用大量磁盤空間募强。因此株灸,如果不必要,應(yīng)盡可能少地 開啟日志擎值。根據(jù)不同的使用環(huán)境慌烧,可以考慮開啟不同的日志。例如幅恋,在開發(fā)環(huán)境中優(yōu)化查詢效率 低的語句杏死,可以開啟慢查詢?nèi)罩荆蝗绻枰涗浻脩舻乃胁樵儾僮骼唬梢蚤_啟通用查詢?nèi)罩荆?如果需要記錄數(shù)據(jù)的變更淑翼,可以開啟二進制日志;錯誤日志是默認開啟的品追。

34.如何使用二進制日志玄括?

二進制日志主要用來記錄數(shù)據(jù)變更。如果需要記錄數(shù)據(jù)庫的變化肉瓦,可以開啟二進制日志遭京。 基于二進制日志的特性,不僅可以用來進行數(shù)據(jù)恢復(fù)泞莉,還可用于數(shù)據(jù)復(fù)制哪雕。在數(shù)據(jù)庫定期備份的 情況下,如果出現(xiàn)數(shù)據(jù)丟失鲫趁,可以先用備份恢復(fù)大部分數(shù)據(jù)斯嚎,然后使用二進制日志恢復(fù)最近備份 后變更的數(shù)據(jù)。在雙機熱備情況下挨厚,可以使用MySQL的二進制日志記錄數(shù)據(jù)的變更堡僻,然后將變 更部分復(fù)制到備份服務(wù)器上。

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

慢查詢?nèi)罩局饕脕碛涗洸樵儠r間較長的日志疫剃。在開發(fā)環(huán)境下钉疫,可以開啟慢查詢?nèi)罩緛碛?錄查詢時間較長的查詢語句,然后對這些語句進行優(yōu)化巢价。通過配long_query_time的值牲阁,可以靈活地掌握不同程度的慢查詢語句固阁。

36.是不是索引建立得越多越好?

合理的索引可以提高查詢的速度咨油,但不是索引越多越好您炉。在執(zhí)行插入語句的時候,MySQL 要為新插入的記錄建立索引役电。所以過多的索引會導致插入操作變慢赚爵。原則上是只有查詢用的字段 才建立索引。

37.如何使用查詢緩沖區(qū)法瑟?

查詢緩沖區(qū)可以提高查詢的速度冀膝,但是這種方式只適合查詢語句比較多、更新語句比較少 的情況霎挟。默認情況下查詢緩沖區(qū)的大小為〇窝剖,也就是不可用∷重玻可以修改queiy_cache_size以調(diào)整 查詢緩沖區(qū)大写蜕础;修改query_cache_type以調(diào)整查詢緩沖區(qū)的類型熬北。在my.ini中修改 query_cache_size 和 query_cache_type 的值如下所示:

Java高架構(gòu)師疙描、分布式架構(gòu)、高可擴展讶隐、高性能起胰、高并發(fā)、性能優(yōu)化巫延、Spring boot效五、Redis、ActiveMQ炉峰、Nginx畏妖、Mycat、Netty疼阔、Jvm大型分布式項目實戰(zhàn)學習架構(gòu)師視頻免費學習加群:835638062 點擊鏈接加入群聊【Java高級架構(gòu)】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓜客,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竿开,更是在濱河造成了極大的恐慌,老刑警劉巖玻熙,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件否彩,死亡現(xiàn)場離奇詭異,居然都是意外死亡嗦随,警方通過查閱死者的電腦和手機列荔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門敬尺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贴浙,你說我怎么就攤上這事砂吞。” “怎么了崎溃?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵蜻直,是天一觀的道長。 經(jīng)常有香客問我袁串,道長概而,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任囱修,我火速辦了婚禮赎瑰,結(jié)果婚禮上破镰,老公的妹妹穿的比我還像新娘鲜漩。我一直安慰自己,他們只是感情好霸饲,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布傻工。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪染厅。 梳的紋絲不亂的頭發(fā)上尔苦,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天屋讶,我揣著相機與錄音,去河邊找鬼。 笑死挤土,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诉字。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谨朝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甥绿,失蹤者是張志新(化名)和其女友劉穎字币,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體共缕,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡洗出,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了图谷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翩活。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖便贵,靈堂內(nèi)的尸體忽然破棺而出菠镇,到底是詐尸還是另有隱情,我是刑警寧澤承璃,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布利耍,位于F島的核電站,受9級特大地震影響盔粹,放射性物質(zhì)發(fā)生泄漏隘梨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一玻佩、第九天 我趴在偏房一處隱蔽的房頂上張望出嘹。 院中可真熱鬧,春花似錦咬崔、人聲如沸税稼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郎仆。三九已至,卻和暖如春兜蠕,著一層夾襖步出監(jiān)牢的瞬間扰肌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工熊杨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曙旭,地道東北人盗舰。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像桂躏,于是被迫代替她去往敵國和親钻趋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容