行鎖:
偏向InnoDB存儲引擎,開銷大,加鎖慢,會出現死鎖,鎖定粒度最小,發生鎖衝突的概率最低,併發度最高。
InnoDB與MyISAM有兩個最大的不同的特點:
- 支持事務
- 採用行級鎖
事務具有四個屬性–ACID
- 原子性:要麼全執行,要麼一個都不執行
- 一致性:在事務開始和完成時,數據都必須保持一致
- 隔離性:事務執行過程是獨立的,不受外部條件影響的
- 持久性:事務完成之後,他對數據的修改是永久的,
併發事務的缺點:
- 更新丟失
- 髒讀
- 不可重複讀
- 幻讀
查看當前數據的事務隔離級別可以使用SQL語句:
SHOW VARIABLES LIKE 'tx_isolation';
好吧,上網查了查是要先設置纔會顯示結果,看的視頻可能已經設置過了,所以纔會出現empty set可能。
實例分析:
表格建立:
CREATE TABLE test_innodb_lock(
a INT(11),
b VARCHAR(16)
)ENGINE=InnoDB;
INSERT INTO test_innodb_lock VALUES(1,'b2');
INSERT INTO test_innodb_lock VALUES(3,'3');
INSERT INTO test_innodb_lock VALUES(4,'4000');
INSERT INTO test_innodb_lock VALUES(5,'5000');
INSERT INTO test_innodb_lock VALUES(6,'6000');
INSERT INTO test_innodb_lock VALUES(7,'7000');
INSERT INTO test_innodb_lock VALUES(8,'8000');
INSERT INTO test_innodb_lock VALUES(9,'9000');
INSERT INTO test_innodb_lock VALUES(1,'b1');
CREATE index test_innodb_a_ind ON test_innodb_lock(a);
CREATE index test_innodb_lock_b_ind ON test_innodb_lock(b);
查看錶格情況:
首先關閉自動提交
SET autocommit=0;//剛剛開始我也不知道這個什麼意思,但是通過視頻裏的實例講解我大概懂了,操作如下
但是如果操作不同條的記錄是不會出現阻塞的,是可以操作的。
而且如果出現索引失效的情況,行鎖會升級表鎖。
還有一種狀況是,間隙鎖危害!