數據庫--行鎖

行鎖:

偏向InnoDB存儲引擎,開銷大,加鎖慢,會出現死鎖,鎖定粒度最小,發生鎖衝突的概率最低,併發度最高。
InnoDB與MyISAM有兩個最大的不同的特點:

  1. 支持事務
  2. 採用行級鎖
事務具有四個屬性–ACID
  1. 原子性:要麼全執行,要麼一個都不執行
  2. 一致性:在事務開始和完成時,數據都必須保持一致
  3. 隔離性:事務執行過程是獨立的,不受外部條件影響的
  4. 持久性:事務完成之後,他對數據的修改是永久的,
併發事務的缺點:
  1. 更新丟失
  2. 髒讀
  3. 不可重複讀
  4. 幻讀
    在這裏插入圖片描述
查看當前數據的事務隔離級別可以使用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;//剛剛開始我也不知道這個什麼意思,但是通過視頻裏的實例講解我大概懂了,操作如下

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

但是如果操作不同條的記錄是不會出現阻塞的,是可以操作的。
而且如果出現索引失效的情況,行鎖會升級表鎖。
在這裏插入圖片描述

還有一種狀況是,間隙鎖危害!

在這裏插入圖片描述
在這裏插入圖片描述

那麼我們如何鎖定一行呢????

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章