例如某行内容,在事务的操作中不能被改变,但可以被查询,则就可以在程序的事务中添加 select for share语句保证,在事务的运行过程中,这行数据不被修改....这样的情况就使用 select for update 对操作的行添加 X 锁的方式解决问题.
那可能有同学会问那我什么都不加的情况下,加的什么锁....MYSQL 数据库本身的定位是快速的OLTP的操作,在高并发中这样的等待的情况可能不被允许,应用程序希望快速的得到我是否可以对这行是否能进行操作,所以在此基础上,MYSQL 8 提供了 NOWAIT 的方式来满足应用的需求..., 而此时又进行了另一个扩大范围的操作,这样的情况如果不使用skip locked 则 第二幅图的小圆操作必然会失败, 使用了skip locked 操作则会让这两个操作不在冲突.
?...可以从图2中看到,如果此时想对已经部分被锁定 部分未被锁定的数据 查询时使用了 for update skip locked 则是可以查到在集合内并未被锁定的数据.