第7章 锁
2023-12-31 05:10:02
第7章 锁
事务在并发中执行出现的现象
- 读-读
不管有有多少个事务同时读,都不会出现问题 - 写-写
并发事务相继对相同的记录进行改动
解决这个,就是加锁,其他事务就不能操作了 - 读-写或者写-读
也就是一个事务进行读取操作,另一个事务进行改动操作
解决这个问题有两种方案:
1.读操作使用多版本并发控制,写操作进行加锁
2.读写操作都采用加锁
锁
- 共享锁
在事务要读取已条记录时,需要先获取这些记录的S锁 - 独占锁
在事务要改动一条记录时,需要先获取该记录的X锁 - 行级锁
就是对表记录进行加的锁
1.记录锁
仅仅给一条记录加锁
2.间隙锁
是对记录范围区间加锁,就是为了解决幻读,还有一种方法解决幻读就是mvcc
3.next-key lock
间隙锁范围,加上本身
加锁
- 间隙锁示例
-- 使用SELECT ... FOR UPDATE语句获取间隙锁
START TRANSACTION;
SELECT * FROM `student` WHERE id >= 10 AND id <= 20 FOR UPDATE;
-- 这里进行需要对students表中指定范围的记录进行修改或删除等操作
COMMIT;
- 死锁示例
-- 事务1
begin;
-- SQL1更新id为1的
update user set age = 1 where id = 1;
-- SQL2更新id为2的
update user set age = 2 where id = 2;
commit;
-- 事务2
begin;
-- SQL1更新id为2的
update user set age = 3 where id = 2;
-- SQL2更新id为1的
update user set age = 4 where id = 1;
commit;
文章来源:https://blog.csdn.net/GZ946/article/details/135311311
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!