一尘不染

在MySQL原子中增加字段吗?

mysql

我正在创建一个网站,希望在其中添加标准MyISAM表中的计数器。

简化示例:

UPDATE votes SET num = num + 1;

如果多个连接都在执行相同的查询,这会引起问题吗,还是MySQL会照顾它并锁定表或其他东西以确保没有冲突?


阅读 296

收藏
2020-05-17

共1个答案

一尘不染

MyISAM表使用表级别锁定。这意味着在执行更新查询期间,整个表将被锁定。因此,简化用例的答案是:是的,这是线程安全的。但是,如果您使用其他存储引擎,或者您的更新中包含多个表,则情况可能并非如此。

这是MySQL手册中的一句话,以更加清楚:

表锁定使许多会话可以同时从一个表读取,但是如果一个会话要写入表,则必须首先获得互斥访问。在更新期间,要访问此特定表的所有其他会话都必须等待,直到更新完成。

如果适合您的设计,您也可以考虑使用自动增量列,事务或外部同步。

干杯!

2020-05-17