Mysql技術內幕知識點摘錄

1:TIMESTAMPDIFF()

2:MONTH,DAY,YEAR

3:ORDER BY RAND() 隨機選行

4:ORDER BY IF(ISNULL(字段), 0, 1), 字段[ASC|DESC] 對NULL的排序處理

5:DATE_ADD(CURDATE(), INTERVAL 6 MONTH)

6:


 注意 <=> 運算符和 = 號的不一樣

 7:設置數據庫自動提交,set autocommit=(0|1),當以事務的方式執行數據庫操作時,相當於臨時掛起默認的提交方式,該爲手動提交,所以事務執行完後需要commit,如果忘記commit就可能會導致其他的數據庫操作阻塞掉,因爲當2個對數據庫的更新或者刪除操作同時進行時,數據庫會對所操作的行上鎖來控制併發,如果事物1更新某一行後遲遲不提交,事物2對同一行的更新操作就無法繼續進行。

8:設置事務的隔離級別:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE} 
注意:默認的行爲(不帶session和global)是爲下一個(未開始)事務設置隔離級別。如果你使用GLOBAL關鍵字,語句在全局對從那點開始創建的所有新連接(除了不存在的連接)設置默認事務級別。你需要SUPER權限來做這個。使用SESSION 關鍵字爲將來在當前連接上執行的事務設置默認事務級別。 任何客戶端都能自由改變會話隔離級別(甚至在事務的中間),或者爲下一個事務設置隔離級別。 查詢級別:
SELECT @@global.tx_isolation; 
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;
9:數據庫中兩個不同的連接對同一行數據進行修改操作時(update, delete),會加行鎖,一個連接讀,一個連接寫時,需要根據事務隔離級別來判斷執行結果。
數據庫隔離級別爲repeatable read時會對錶裏的行加鎖,也就是一個事務在讀取某些行時另一個事務不能去修改這些行裏的字段,所以可以解決不可重複讀的問題但是不能解決幻讀的問題。
數據庫隔離級別爲sysn時,會對整個表加鎖,也就是說一個事務在對錶進行操作時,另一個事務不能對該表進行任務操作。所以犧牲性能帶來了解決不可重複讀和幻讀的問題。
10:索引的缺點,佔用空間,如何判斷是否需要建立索引:儘量爲作爲查詢條件的列建立索引,考慮一個列的維度數,維度數越高的列索引效果越好,應該對儘量短小的值建立索引(好處:加快比較操作,減小索引體積進而減少IO,提高內存緩存索引塊包含鍵值的數量),

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章