mysql数据库锁:行锁
发布网友
发布时间:2024-10-16 23:40
我来回答
共1个回答
热心网友
时间:2024-10-18 00:28
行级锁是指锁定表中的一行数据,具有更小的粒度,能够在高并发场景下提供更好的并发性能和减少锁冲突。
共享锁,也称为读锁(S锁),允许其他事务读取这行数据,但不能进行修改。
排它锁,也称为写锁(X锁),禁止其他事务查询、添加、修改或删除这行数据。
需要注意的是,行级锁仅在事务中有效。在一个事务开始后,直到事务提交或回滚之前,才能对数据行进行锁定。
以下为行锁发生的命令:
select...for update:对选定的行添加一个排它锁(X锁),即记录锁。
select...lock in share mode:对选定的行添加一个共享锁(S锁)。
insert:新添加的行会添加一个排它锁(X锁)。
update:被修改的行会添加一个排它锁(X锁)。
delete:被删除的行会添加一个排它锁(X锁)。
以下为上机演示:
A窗口:X锁
START TRANSACTION
select * from bank where id = 1 for update;
commit;
B窗口:X锁
START TRANSACTION
select * from bank where id = 1 for update;
commit;
A窗口:S锁
START TRANSACTION
select * from bank where id = 1 lock in share mode
commit;
B窗口:S锁
START TRANSACTION
select * from bank where id = 1 lock in share mode
DELETE FROM bank where id = 1
commit;