@H_502_1@在一个MysqL数据库中,每个基于InnoDB的表都启用了自动提交,子查询和/或连接的查询是原子的吗?
@H_502_1@例子:
@H_502_1@> INSERT INTO用户SELECT(x,y,z)FROM users,comments WHERE users.id = comments.user_id; (连接)
> UPDATE用户,评论SET users.x = x1 WHERE users.age> 30; (连接)
> UPDATE用户,评论SET users.x = x1,comments.y = y1 WHERE users.age> 30; (连接)
> UPDATE用户,注释SET users.x = x1,comments.y = y1 WHERE users.id IN(SELECT id FROM users WHERE age> 30); (子查询)
最佳答案
我理解你的问题是“每个查询本身都是一个原子操作吗?”.然后答案是肯定的.另外两个答案是对的,当他们说你所有的陈述都不是原子的.
@H_502_1@数据库中的原子性仅表示全部或全部.它并不意味着数据的正确性.你的陈述成功与否.它与连接或子查询无关.一个语句是一个语句,无论您的数据库是否必须在内存或磁盘上使用临时表.
@H_502_1@事务只是告诉您的数据库将多个语句视为一个语句.当其中一个语句失败时,所有语句都会回滚.
@H_502_1@这里一个重要的相关主题是isolation level.您可能想要了解这些内容.
@H_502_1@编辑(回答评论):
@H_502_1@那就对了.只要它是有效的声明并且没有发生