【问题标题】:Place a lock on a record when inserting in mysql during a transaction在事务期间插入mysql时对记录加锁
【发布时间】:2013-12-27 21:33:37
【问题描述】:

如何在我插入到 MySQL 表中的行上放置共享或排他锁?

我想确保如果我在事务期间插入一行,则另一个事务不能在事务的其余部分更改或删除该行。

干杯!

【问题讨论】:

  • 这是你的事务,在它被提交之前没有其他人可以看到它,这就是事务的工作方式,在你完成之前它是孤立的。您是否试图阻止您自己的代码修改您自己的行?
  • 谢谢。是的,我想使用我在事务中创建的行,并确保在我可以使用它之前不能从另一个事务中删除它,但是在提交之前它当然不会在事务之外可见。

标签: mysql sql insert transactions locking


【解决方案1】:

您的表需要使用 InnoDB 或等效的。

然后你做:

 START TRANSACTION;
 SELECT something FROM sometable WHERE somecolumn = somekey 
        FOR UPDATE;

然后您修改有问题的行。最后,

 COMMIT;

你就完成了。

如果你需要一致的阅读,你可以用这个来代替:

 SELECT something FROM sometable WHERE somecolumn = somekey 
        LOCK IN SHARE MODE;

【讨论】:

  • 感谢您提供此信息。问题是我忘记了该行实际上不需要锁定,因为在实际提交事务之前,其他任何人都看不到它。
【解决方案2】:

您不需要这样做,因为在事务完成之前,事务中所做的任何事情(包括创建记录)实际上在事务之外都是可见的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2016-07-21
    • 2015-08-21
    • 2015-11-10
    • 2018-08-15
    相关资源
    最近更新 更多