谈谈mysql的悲观和乐观锁
时间:2021-07-01 10:21:17
帮助过:34人阅读
.
SELECT data
AS old_data, version
AS old_version
FROM …;
2. 根据获取的数据进行业务操作,得到new_data和new_version
3.
UPDATE SET data
= new_data, version
= new_version
WHERE version
= old_version
if (updated row
> 0) {
// 乐观锁获取成功,操作完成
} else {
// 乐观锁获取失败,回滚并重试
}
乐观锁是否在事务中其实都是无所谓的,其底层机制是这样:在数据库内部update同一行的时候是不允许并发的,即数据库每次执行一条update语句时会获取被update行的写锁,直到这一行被成功更新后才释放。因此在业务操作进行前获取需要锁的数据的当前版本号,然后实际更新数据时再次对比版本号确认与之前获取的相同,并更新版本号,即可确认这之间没有发生并发的修改。如果更新失败即可认为老版本的数据已经被并发修改掉而不存在了,此时认为获取锁失败,需要回滚整个业务操作并可根据需要重试整个过程。
总结
谈谈mysql的悲观和乐观锁
标签:ted 关于 思路 来讲 时间 提升 new 编程 结束