關于下文中的表格看法,按照時間軸排列的
InnoDB 行級鎖是通過給索引上的索引項加鎖來實作的,InnoDB行級鎖隻有通過索引條件檢索資料,才使用行級鎖;否則,InnoDB使用表鎖
在不通過索引(主鍵)條件查詢的時候,InnoDB是表鎖而不是行鎖。
建立表
建立一個沒有主鍵的表
CREATE TABLE `test_no_key` (
`f1` int(11) NOT NULL ,
`f2` varchar(11) DEFAULT NULL
)
ENGINE=InnoDB
插入倆條資料
insert into from test_no_key (f1,f2) values (1,2);
insert into test_no_key (f1,f2) values (2,2);
開啟倆個程序
案例1
就是在沒有使用索引的情況下InnoDB就會使用表級鎖(共享鎖不會有這個情況)
程序1 | 程序2 |
begin | |
會出現等待 | |
程序1執行送出 | |
案例2
給表加上主鍵
這個測試可以看到,當有主鍵時,是行鎖,隻會對一條資料進行加鎖
案例3
如果查詢的條件沒有帶索引,那麼行鎖則會轉為表鎖即時表中字段有主鍵;是以在查詢的時候建議使用索引字段查詢
檢視表資料