MySQL的并发性,它是如何工作的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (91)

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

每个登录到我的应用程序的人都可以查看记录,我担心在某个时候两个用户可能会同时更新或插入记录。MySQL是否可以处理了这种类型的并发问题,或者是我将不得不编程代码?

如果我必须把它编入我的代码中,我怎么去处理这样的并发情况呢?

提问于
用户回答回答于

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

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

扫码关注云+社区

领取腾讯云代金券