mysql的行鎖與表鎖

2021-08-30 15:17:22 字數 2004 閱讀 1375

mysql 行鎖與表鎖

只根據主鍵進行查詢,並且查詢到資料,主鍵字段產生行鎖。

begin;

select * from table where id = 1 for update;

commit;

只根據主鍵進行查詢,沒有查詢到資料,不產生鎖。

begin;

select * from table where id = 1 for update;

commit;

根據主鍵、非主鍵含索引(name)進行查詢,並且查詢到資料,主鍵字段產生行鎖,name欄位產生行鎖。

begin;

select * from table where id = 1 and name=『name1』 for update;

commit;

根據主鍵、非主鍵含索引(name)進行查詢,沒有查詢到資料,不產生鎖。

begin;

select * from table where id = 1 and name=『name1』 for update;

commit;

根據主鍵、非主鍵不含索引(name)進行查詢,並且查詢到資料,如果其他執行緒按主鍵字段進行再次查詢,則主鍵字段產生行鎖,如果其他執行緒按非主鍵不含索引字段進行查詢,則非主鍵不含索引字段產生表鎖,如果其他執行緒按非主鍵含索引字段進行查詢,則非主鍵含索引字段產生行鎖,如果索引值是列舉型別,mysql也會進行表鎖,這段話有點拗口,大家仔細理解一下。

begin;

select * from table where id = 1 and name=『name1』 for update;

commit;

根據主鍵、非主鍵不含索引(name)進行查詢,沒有查詢到資料,不產生鎖。

begin;

select * from table where id = 1 and name=『name1』 for update;

commit;

根據非主鍵含索引(name)進行查詢,並且查詢到資料,name欄位產生行鎖。

begin;

select * from table where name=『name1』 for update;

commit;

根據非主鍵含索引(name)進行查詢,沒有查詢到資料,不產生鎖。

begin;

select * from table where name=『name1』 for update;

commit;

根據非主鍵不含索引(name)進行查詢,並且查詢到資料,name欄位產生表鎖。

begin;

select * from table where name=『name1』 for update;

commit;

根據非主鍵不含索引(name)進行查詢,沒有查詢到資料,name欄位產生表鎖。

begin;

select * from table where name=『name1』 for update;

commit;

只根據主鍵進行查詢,查詢條件為不等於,並且查詢到資料,主鍵字段產生表鎖。

begin;

select * from table where id <> 1 for update;

commit;

只根據主鍵進行查詢,查詢條件為不等於,沒有查詢到資料,主鍵字段產生表鎖。

begin;

select * from table where id <> 1 for update;

commit;

只根據主鍵進行查詢,查詢條件為 like,並且查詢到資料,主鍵字段產生表鎖。

begin;

select * from table where id like 『1』 for update;

commit;

只根據主鍵進行查詢,查詢條件為 like,沒有查詢到資料,主鍵字段產生表鎖。

begin;

select * from table where id like 『1』 for update;

commit;

Mysql行鎖與表鎖

用主鍵修改就是行瑣,或者用索引修改就是行瑣 update tab set name xx where id xx 行鎖 update tab set name xx where date 非主鍵或索引 xx 表鎖 插入的時候呢?插入都是行鎖 alert語句修改表結構,表鎖 表鎖和行鎖同時發生時,會等...

mysql 行鎖與表鎖

為日常整理,可能會有些重複.行鎖表表鎖 1 多個事務操作同一行資料時,後來的事務處於阻塞等待狀態。這樣可以避免了髒讀等資料一致性的問題。後來的事務可以操作其他行資料,解決了表鎖高併發效能低的問題。2 innodb的行鎖是針對索引加的鎖,不是針對記錄加的鎖。並且該索引不能失效,否則都會從行鎖公升級為表...

mysql行鎖的特性 MySql的表鎖行鎖及間隙鎖

常用命令 手動新增表鎖 lock table 表名稱 read write 表名稱2 read write 檢視表上加過的鎖 show open tables 刪除表鎖 unlock tables 1.表鎖 特點 1.每次操作鎖住整張表,開銷小,加鎖快 2.不會出現死鎖 3.鎖定粒度大,發生鎖衝突的...