【问题标题】:concurrent UPDATEs in MySQLMySQL 中的并发更新
【发布时间】:2016-09-10 00:16:14
【问题描述】:

我有一个调用以下 MySQL 查询的 PHP 脚本:

UPDATE table1
SET column1=1
WHERE column1=0

然后 PHP 脚本返回 mysqli_affected_rows

应该只能得到一次肯定的结果,因为在执行此脚本后不会有column1=0 的行。

我的问题是:如果这个脚本被并发执行多次,理论上是否有可能多次获得肯定的结果?

【问题讨论】:

    标签: php mysql concurrency sql-update


    【解决方案1】:

    这取决于用于表的数据库引擎。

    如果您使用的是 MyISAM,它将在执行查询时锁定整个表。其他尝试访问该表的查询将被阻止,直到它完成。当它们运行时,将没有符合条件的行。所以只有其中一个会执行任何更新。

    如果您使用 InnoDB,它会锁定它更新的各个行。不同的并发查询可以更新表的不同行,因此它们都会得到非零结果。

    【讨论】:

    • 我刚才只是在开玩笑。对不起。
    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2017-07-29
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多