mysql - InnoDB 中的 'update tokens set tokens = tokens + 1' 是原子的吗?

标签 mysql thread-safety innodb atomic

在不使用显式事务的情况下,是:

update tokens set tokens = tokens + 1

保证在 InnoDB 中是原子的?

最佳答案

我的理解是,在自动提交模式(即“没有显式事务”)下,单个语句就是一个事务。由于事务按照定义是原子的,因此您的单个语句也是原子的。

但是,当涉及到评估约束时,这不是在语句(即事务)级别上完成的,而是在处理语句时逐行完成的。

如果您在 tokens 列上有唯一约束(索引),则该更新很可能因此失败。对于引用同一个表的外键也是如此。

关于mysql - InnoDB 中的 'update tokens set tokens = tokens + 1' 是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406922/

相关文章:

Php mysql 更新一个新的唯一 id

mysql - 汇总不同组的每个 ID 的结果

ruby - 是否可以确保线程代码在 Ruby 中没有副作用?

c++ - std::mutex 的释放-获取可见性保证是否仅适用于临界区?

相关大表上的 MySQL Slow INSERT,100% CPU 使用率

MySQL 更新卡住

sql - 如何获取刚刚插入的文件的主键 ID?

java - 锁定两种方法但允许一种方法运行多线程

MySQL 全文搜索 - 最小标记大小下的 bool 搜索项意味着没有结果返回

mysql - Mariadb 无法重新启动|启动