在执行UPDATE之前,MySql:SELECT ... FOR UPDATE中断

时间:2018-03-27 10:56:49

标签: mysql transactions

我正在做一个SELECT ... FOR UPDATE来锁定一条记录,然后进行一些计算,然后进行实际的UPDATE。我正在研究InnoDB数据库。

但是计算结果可能最终处于我不想执行UPDATE的状态。在这种情况下如何取消锁定?

1 个答案:

答案 0 :(得分:2)

InnoDB就是这样做的。你需要manage your transactions

  • 在执行SELECT ... FOR UPDATE之前,请执行START TRANSACTION
  • 然后执行SELECT ... FOR UPDATE
  • 然后完成数据库的其余工作。
  • 然后执行COMMIT

如果您决定不想完成更新工作,请执行ROLLBACK而不是COMMIT,并且会丢弃您的交易中的每项更改。数据库返回到START TRANSACTION之前的状态。

不要忘记COMMITROLLBACK,特别是在调试时。如果您忘记了,您的数据库似乎会锁定,因为未来的SELECT ... FOR UPDATE操作可能会等待您的COMMIT。 (不要问我怎么知道这个。: - )