MySQL中的并发UPDATE

时间:2016-09-10 00:16:14

标签: php mysql concurrency sql-update

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

UPDATE table1
SET column1=1
WHERE column1=0

PHP脚本然后返回mysqli_affected_rows

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

我的问题是:如果此脚本多次并发执行,理论上是否可以多次获得正面结果?

1 个答案:

答案 0 :(得分:1)

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

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

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