mysql支援myisam和memory引擎的表級鎖
加表鎖:lock table
釋放表鎖:unlock table、當前執行緒lock table 其它表和關閉連線隱式釋放鎖。
以表鎖為例,鎖定語句到三種形式:
隱式加鎖:myisam引擎select加讀鎖,其他它操作加寫鎖,不需要顯式的加read和write
read:表讀鎖 lock table table_name read
write:表寫鎖 lock table table_name write
mysql表級兩種鎖模式:表共享讀鎖、表獨佔寫鎖 ,相容性如圖所示:
總結:因為事務的隔離特性,按隔離級別sql語句會隱式加鎖,了解鎖定語句對事務的學習還是很有必要的。
事務相關語句
開啟事務,提交事務,提交並開啟新事物,回滾事務
開始事務會釋放鎖,在同一事務中,最好不使用不同儲存引擎
概念:事務是乙個不可拆分的邏輯單元,比如:開啟事務-購買商品支付完成加積分-提交事務,這個本地事務能保證要麼失敗要不成功。當這個邏輯單元跨程序跨服務時,就是分布式事務,支付系統支付完成,那麼積分系統就必須加積分,這兩個分支事務具有原子性。
只有innodb支援分布式事務
單個分布式事務本身支援事務
要麼都成功,要麼都會滾,保證資料一致性,最終目的。
分布式事務由乙個或多個資源管理器和乙個資源管理器rm進行協調控制tm
2pc:prepare階段;commit階段
2pc存在問題:
客戶端™異常中斷:tm通知事務1提交,tm在通知事務2提交時掉線,導致事務2回滾,則資料不一致。
解決方案:3pc,在一次xa事務中增加詢問機制,降低異常概率。
tx-lcn框架
阿里seata
參考:《深入淺出mysql》
事務控制和鎖定語句
myisam 和memory 儲存引擎的表 表級鎖定 bdb儲存引擎的表 頁級鎖定 innodb 的儲存引擎的表 行級鎖定 預設情況下,表鎖和行鎖是自動獲取,不需要額外的命令。但有的情況下,使用者需要明確地進行鎖表或進行事務控制,以便確保整個事務的完整性,因而需要事務控制和鎖定語句。1 lock t...
MySQL的事務控制和鎖定語句
1.預設情況下 表鎖和行鎖都是自動獲得的,不需要額外命令。2.某些情況下,使用者需要明確地進行鎖表或者進行事務的控制,以便確保整個事務的完整性。3.lock tables 可以鎖定用於當前執行緒的表。如果表被其他執行緒鎖定,則當前執行緒會等待,直到可以獲取所有鎖定為止。4.unlock tables...
鎖定和行版本控制
當多個使用者同時訪問資料時,sql server 資料庫引擎使用以下機制確保事務的完整性和保持資料庫的一致性 每個事務對所依賴的資源 如行 頁或表 請求不同型別的鎖。鎖可以阻止其他事務以某種可能會導致事務請求鎖出錯的方式修改資源。當事務不再依賴鎖定的資源時,它將釋放鎖。當啟用了基於行版本控制的隔離級...