事務就是要保證一組資料庫操作,要麼全部成功,要麼全部失敗。在 mysql 中,事務支援是在引擎層實現的。innodb支援事務。
隔離得越嚴實,效率就會越低。
在實現上,資料庫裡面會建立乙個檢視,訪問的時候以檢視的邏輯結果為準。
在 mysql 中,實際上每條記錄在更新的時候都會同時記錄一條回滾操作。記錄上的最新值,通過回滾操作,都可以得到前乙個狀態的值。回滾日誌在不需要的時候才刪除。也就是說,系統會判斷,當沒有事務再需要用到這些回滾日誌時,回滾日誌會被刪除。
長事務意味著系統裡面會存在很老的事務檢視。由於這些事務隨時可能訪問資料庫裡面的任何資料,所以這個事務提交之前,資料庫裡面它可能用到的回滾記錄都必須保留,這就會導致大量占用儲存空間。長事務還占用鎖資源,也可能拖垮整個庫。
1、顯式啟動事務語句,begin
或start transaction
。配套的提交語句是commi
t,回滾語句是rollback
。
2、set autocommit=0
,這個命令會將這個執行緒的自動提交關掉。意味著如果你只執行乙個select
語句,這個事務就啟動了,而且並不會自動提交。這個事務持續存在直到你主動執行commit
或rollback
語句,或者斷開連線。
在autocommit
為 1 的情況下,用begin
顯式啟動的事務,如果執行commit
則提交事務。如果執行commit work and chain
,則是提交事務並自動啟動下乙個事務,這樣也省去了再次執行begin
語句的開銷。
實戰mysql45講 MySQL實戰45講
作者簡介 林曉斌,網名 丁奇 前阿里資深技術專家,曾負責阿里雲rds核心開發團隊和運維團隊,並推動了alisql分支開源。作為活躍的mysql社群貢獻者,丁奇專注於資料儲存系統 mysql原始碼研究和改進 mysql效能優化和功能改進,熱衷於解決mysql疑難問題。課程亮點 你將獲得 前阿里資深技術...
MySQL實戰45講之2 事務隔離級別
讀未提交 別人改資料的事務尚未提交,我在我的事務中也能讀到。讀已提交 別人改資料的事務已經提交,我在我的事務中才能讀到。可重複讀 別人改資料的事務已經提交,我在我的事務中也不去讀。序列 我的事務尚未提交,別人就別想改資料。這4種隔離級別,並行效能依次降低,安全性依次提高。在實現上,資料庫裡面會建立乙...
mysql實戰45講筆記 07
07 行鎖功過 怎麼減少行鎖對效能的影響 mysql的行鎖是在引擎層由各個引擎自己實現的,不是所有資料庫都支援行鎖比如myisam 行鎖就是針對資料表中行記錄的鎖。在innodb事務中,行鎖是在需要的時候才加上的,但並不是不需要了就立刻回訪,而是等到事務結束時才釋放,這就是兩階段鎖協議。因此,如果事...