使用SELECT ... FOR UPDATE语句以悲观锁的方式锁定要修改的数据,从而避免并发更新导致的问题。
示例代码如下:
session1: BEGIN; SELECT * FROM table_name WHERE id=1 FOR UPDATE; -- 对表进行修改操作 COMMIT;
session2: BEGIN; SELECT * FROM table_name WHERE id=1 FOR UPDATE; -- 对表进行修改操作,此时会被阻塞 COMMIT;
在session1中执行SELECT ... FOR UPDATE语句时,会锁定id为1的数据行,阻止其他session对该数据行进行并发修改。在session2中执行SELECT ... FOR UPDATE时,由于该数据行已被session1锁定,因此会被阻塞,直到session1释放锁定并提交事务。这样就能保证并发修改不会造成数据不一致的问题。
上一篇:并发更新和删除请求死锁问题。
下一篇:并发归并排序