程序员MySQL 开发MySQL

MySQL 并发控制 -- 读锁、写锁、乐观锁

2019-03-25  本文已影响12人  殷天文

并发是一个让人很头疼的问题,通常我们会在服务端或者数据库端做处理,保证在并发下数据的准确性,今天我们简要的讨论一下MySQL中如何通过锁解决并发问题

读锁

事务1
BEGIN;
select * from sys_user where id = 1 LOCK IN SHARE MODE; (步骤1)

update sys_user set username = "taven" where id = 1; (步骤3,发生阻塞)
COMMIT;
事务2
BEGIN;
select * from sys_user where id = 1 LOCK IN SHARE MODE; (步骤2)

update sys_user set username = "taven" where id = 1; (步骤4,死锁)
COMMIT;

写锁

乐观锁

update t_goods 
set status=2,version=version+1
where id=#{id} and version < #{version}; // 更新前将version自增

或者

update t_goods 
set status=2,version=version+1
where id=#{id} and version = #{version}; // 更新前version 不自增
上一篇 下一篇

猜你喜欢

热点阅读