例如某行内容,在事务的操作中不能被改变,但可以被查询,则就可以在程序的事务中添加 select for share语句保证,在事务的运行过程中,这行数据不被修改....我们可以看到在事务1 运行过程中, 事务2 已经将查看的员工信息的title 进行了更改....这样的情况就使用 select for update 对操作的行添加 X 锁的方式解决问题.
那可能有同学会问那我什么都不加的情况下,加的什么锁....(当然这里是有条件的)
对于有些业务中,对于数据在操作时,不运行读的情况可以使用 for update 和 for share 的组合,
事务 1
?
事务2
?...MYSQL 数据库本身的定位是快速的OLTP的操作,在高并发中这样的等待的情况可能不被允许,应用程序希望快速的得到我是否可以对这行是否能进行操作,所以在此基础上,MYSQL 8 提供了 NOWAIT 的方式来满足应用的需求