我目前运行的是一个MySQL数据库。我所有的表都在使用表引擎InnoDB。
登录到我的应用程序的每个人都可以查看记录,我担心在某个时刻,两个用户可能会同时更新或插入一条记录。MySQL能很好地处理这种并发问题吗?或者这是我必须在我的代码中编程的东西?
如果我必须将其编程到我的代码中,那么如何处理这样的并发情况呢?
发布于 2011-01-28 21:10:12
SQL语句是原子的。也就是说,如果您执行如下代码:
UPDATE Cars SET Sold = Sold + 1
在此语句过程中,任何人都不能更改Sold
变量。它总是递增1,即使其他人正在并发执行相同的语句。
如果您有相互依赖的语句,则会出现问题:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
在这些查询之间,另一个用户可以更改Cars表并更新Sold。为了防止这种情况,请将其包装在事务中:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
InnoDB支持事务,但MyISAM不支持。
https://stackoverflow.com/questions/4828490
复制相似问题