一尘不染

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

mysql

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

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

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


阅读 209

收藏
2020-05-17

共1个答案

一尘不染

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不支持。

2020-05-17