【问题标题】:UPDATE.. WHERE... - can a transaction happen in between更新..在哪里... - 交易可以在两者之间发生吗
【发布时间】:2015-01-26 06:57:15
【问题描述】:

如果我编写如下 SQL 语句

 UPDATE table SET a='000' WHERE b='Me!';

假设查询找到了满足条件的行,是否可以在我进行更新之前让另一个事务更改字段 'b' 的值?

如果是这样,我假设我的事务在我尝试提交时会失败?

【问题讨论】:

  • 是的,它会失败,因为您的语法错误。 UPDATE table_name SET column1=value1,column2=value2,...
  • 好的。我在手机上打字是因为我们公司阻止堆栈溢出。我很惊讶你无法理解我的问题的要点。
  • 您的公司阻止了 SO,但有代理 FREE PROXY 之类的东西。跳出框框思考。
  • 你对 StackOverflow Rafael 毫无价值
  • 请为您正在使用的 DBMS(Postgres、Oracle 等)添加标签。 b 是主键还是唯一键?

标签: mysql sql concurrency transactions innodb


【解决方案1】:

如果另一个事务已经更新并且没有提交具有b = Me! 的行,您将遇到行锁定异常。如果已提交,则表示 b 值已更改,您的查询不会影响该行。

第二个选项,您已经更新了该行并且另一个查询想要在您提交之前更新该行。在这种情况下,第二个事务将得到行锁定错误。如果您已经提交,其他查询不会影响该行。

提交时不会收到任何错误消息或异常。如果有任何错误,您将在运行更新查询时得到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2013-09-13
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多