MySQL并发,它是如何工作的,我需要在我的应用程序中处理它

时间:2011-01-28 13:01:31

标签: mysql

我目前正在运行MySQL数据库。我的所有表都使用Table Engine InnoDB。

登录我的应用程序的每个人都可以查看记录,我担心在某些时候两个用户可能同时更新或插入记录。 MySQL是否优雅地处理这种类型的并发问题,或者这是我必须编程到我的代码中的东西?

如果我必须将其编程到我的代码中,您如何处理这样的并发案例?

1 个答案:

答案 0 :(得分:28)

SQL语句是原子的。也就是说,如果你执行这样的事情:

UPDATE Cars SET Sold = Sold + 1

在此声明中,没有人可以更改Sold变量。它总是递增1,即使其他人同时执行相同的语句。

如果您的语句相互依赖,则会出现问题:

a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;

在这些查询之间,另一个用户可以更改表Cars并更新已售出。要防止这种情况,请将其包装在事务中:

BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;

InnoDB支持交易,但MyISAM不支持。