(05)儲存引擎 隔離級別

2022-09-21 06:06:12 字數 1595 閱讀 4778

只支援表鎖:加鎖時,會鎖定整張表資料。

表讀鎖加鎖: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會話級別的事務隔離級別 ...