为什么使用 SELECT FOR UPDATE?

Why use SELECT FOR UPDATE?

我对我们使用的目的有疑问 SELECT FOR UDPATE?它具体是做什么的?

我有 2 个 table,我需要 table 中的 select 行并更新相同的行。

例如:

Select查询

SELECT * from  t1 WHERE city_id=2 for update

更新查询

UPDATE t1 SET final_balance = final_balance - 100 WHERE city_id ='2'

我的问题 - 这是否真的会锁定读取操作直到我的更新完成,或者它究竟处理了什么?

我的想法是在我更新完成之前没有人可以read/updatefrom/to这一行..

谢谢!

SELECT ... FOR UPDATE 将使用写(独占)锁锁定记录,直到事务完成(提交或回滚)。

到select一条记录并确保它在更新之前不被修改,你可以启动一个事务,select记录使用SELECT ... FOR UPDATE,做一些快速处理,更新记录,然后提交(或回滚)事务。

如果您在事务之外使用SELECT ... FOR UPDATE(自动提交开启),那么锁仍然会立即释放,所以一定要使用事务来保留锁。

为了性能,不要让事务打开太久,所以更新应该立即完成。