【问题标题】:MySQL Transaction - Reading during TransactionMySQL 事务 - 在事务期间读取
【发布时间】:2014-08-22 23:58:33
【问题描述】:

如果我在 MySQL 中启动一个事务并像这样更新一行:

UPDATE table SET SomeValue ...... WHERE Id = 1;

我可以立即这样做吗:

SELECT SomeValue FROM table WHERE Id = 1;

...在同一个连接/会话期间,事务尚未提交,假设现在我正在获取更新的 SomeValue,并且可以安全地假设在我提交事务之前没有任何东西可以更新该 SomeValue?

谢谢。

【问题讨论】:

  • 设置一个测试来确认这种行为是相当简单的。请注意,您观察到的行为将取决于表的存储引擎,结果将根据表是使用 MyISAM 还是 InnoDB 而有所不同。

标签: mysql transactions


【解决方案1】:

在您提交之前,没有其他会话可以更新该行。

您可以自己测试,打开两个终端窗口,运行 mysql shell,然后尝试在一个窗口中启动事务和更新,但不要提交。然后尝试在第二个窗口中更新。它会挂起,直到第一个窗口提交或达到 innodb 锁定等待超时。

从表中选择对锁没有任何影响。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多