只支援表鎖:加鎖時,會鎖定整張表資料。
表讀鎖加鎖:lock table table_name read;
解鎖:unlock tables;
表寫鎖加鎖:lock table table_name write;
解鎖:unlock tables;
myisam會自動幫我們上鎖,我們對myisam儲存引擎操作時,無需關注如何上鎖
支援表鎖,也支援行鎖。加鎖時,可以鎖定某行,或者鎖某張表。
注意:innodb使用索引作為條件時,才是行鎖。如果條件不是索引,則是表鎖
明確指定主鍵或索引,並且資料真實存在,行鎖。如果換成其他非索引字段,表鎖。select status from t_goods where id = 1 for update;
明確指定主鍵或索引,但資料不存在,無鎖select status from t_goods where id = 0 for update;
主鍵或索引不明確,表鎖select status from t_goods where id <= 3 for update;
無主鍵或索引,表鎖讀鎖select status from t_goods for update;
加鎖:select ... lock in share mode
解鎖:提交事務自動解鎖
寫鎖加鎖:select ... for update
解鎖:提交事務自動解鎖
innodb 中的鎖,必須在事務中才能使用
使用該級別會存在髒讀
髒讀:乙個事務讀到了另乙個未提交的事務
舉例:a視窗給b視窗轉500塊錢(a沒有提交事務),b視窗讀取到了a視窗中的未提交的事務的資料(b也沒有提交事務)
使用該級別會存在不可重複讀
不可重複讀:乙個事務讀到了另乙個已提交的事務。
舉例:a視窗給b視窗轉500塊錢(a沒有提交事物),b視窗讀到了原始的資料(b也沒提交事務),當a提交事務後,b讀到了a提交的事物的資料(b還是沒有提交事務)。乙個事務內,兩次讀取到的資料不一致,這就是不可重複讀
使用該級別會存在幻讀
幻讀:乙個事務重複插入另外乙個已提的交事務插入的資料。
舉例:
1、a視窗插入id=3的資料(a未提交事務)。
2、b視窗讀資料時,沒有讀到id=3的資料(b未提交事務)。
3、b視窗插入id=3的資料,插入語句出現等待狀態。(b未提交事務)
4、a視窗提交事務。b視窗退出等待狀態,並且插入語句出現主鍵重複異常。
相當於所有的sql語句,都序列執行
05 資料庫儲存引擎
資料庫儲存引擎 1.資料庫儲存引擎 1.1 mysql儲存引擎架構 儲存引擎四層架構 儲存引擎層,資料操作與檔案系統的中間層,負責mysql中資料的儲存與提取,規定了底層硬體運算元據的方式,選擇的儲存引擎的不同針對底層檔案的操作不同。伺服器中的查詢執行引擎通過api與儲存引擎進行通訊,通過介面遮蔽了...
MySQL InnoDB儲存引擎的事務隔離級別
我們知道,在關聯式資料庫標準中有四個事務隔離級別 檢視innodb系統級別的事務隔離級別 mysql select global.tx isolation global.tx isolation repeatable read 1 row in set 0.00 sec 檢視innodb會話級別的事...
MySQL InnoDB儲存引擎的事務隔離級別
在關係資料庫標準中有四個事務隔離級別 檢視innodb系統級別的事務隔離級別 mysql select global.tx isolation global.tx isolation repeatable read 1 row in set 0.00 sec 檢視innodb會話級別的事務隔離級別 ...