一尘不染

mysql是否在单个查询原子内多次插入?

sql

我在 单个 查询中执行多个插入操作:

INSERT INTO table (c1, c2) VALUES (1,2),
                                  (2,3),
                                  (3,4),......
         ON DUPLICATE KEY UPDATE c2 = VALUES(c2)

现在假设在查询中指定了成千上万的值(因此省略号)…。

是否可能存在某些情况下VALUES的某些部分设法在数据库中进行了插入/更新,而其余部分却由于某种类型的db错误/故障/内存耗尽等而没有得到插入/更新?

mysql查询是全部还是什么?

确实,对于每个执行的mysql查询,查询中指定的所有值都将被平滑地插入/更新,或者没有一个值将被插入/更新?


阅读 144

收藏
2021-03-10

共1个答案

一尘不染

ACID
(原子性,一致性,隔离性,耐久性)属性用于描述数据库中的此类行为。仅当我们要处理并发修改时,原子性才重要。为了确保一致性,必须达到一定程度的隔离。但是,多个事务运行的隔离度越高,DBMS通常具有的性能就越差。因此,有一个所谓的“隔离级别”,它指出在DBMS中可能发生什么错误,而哪些错误不会发生。

现在,MySQL在INNODB数据库中实现了所有隔离级别,您可以为每个事务选择:https : //dev.mysql.com/doc/refman/5.1/en/set-
transaction.html

MyIsam数据库不支持事务,但是单个操作应该自动运行。(来源:https : //dev.mysql.com/doc/refman/5.0/en/ansi-diff-
transactions.html)。但是请注意,这不能保证在一个操作中读取和写入之间的数据不会更改-
DBMS术语中的原子性仅表示该操作已完全完成或已完全跳过。它不保证隔离,一致性或持久性。

2021-03-10