MySql教程

【Mysql面试高频】- Mysql的乐观锁机制了解吗?

本文主要是介绍【Mysql面试高频】- Mysql的乐观锁机制了解吗?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【Mysql面试高频】- Mysql的乐观锁机制?

乐观锁(所有用户都可以读取和修改,通过版本控制谁的修改有效)。

当先执行查询在执行修改的时候就会出现并发数据,会修改相同数据,导致结果不对。

select * from order where id = 1;
update order set num = num+1 where id = 1;

并发时,同时查出来的num结果为1;修改的时候num都是相同值,一条执行结果未修改;

采用乐观锁来解决该方式:

在数据库表字段增添版本控制,或者直接使用修改时间字段作为参数。(时间字段的好处就是每次修改成功 自动更新修改时间字段则可以不用在sql中加入修改了。)

order表:

id num version update_time

select * from order where id = 1;
update order set num = num + 1,version = version+1 where id = 1 and version = 1;
select * from order where id = 1;
update order set num = num + 1,version = version+1 where id = 1 and version = 1;

并发时,同时查出来的num结果为1,version结果为1,由于第一条sql修改已经执行。数据库实际version的结果为2了。第二条sql修改则失败。

结论: 由于第一条修改SQL已经执行,这个时候已经开启了乐观锁,所以第二条修改sql则执行失败。

这篇关于【Mysql面试高频】- Mysql的乐观锁机制了解吗?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!