gpt4 book ai didi

mysql - 单个查询中的 mysql 多个插入是原子的吗?

转载 作者:可可西里 更新时间:2023-11-01 06:28:09 26 4
gpt4 key购买 nike

我在一个单个查询中进行多次插入:

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

现在假设在查询中指定了超过数万个 VALUES(因此省略号)...

是否存在这样一种情况,其中 VALUES 的某些部分设法在数据库中插入/更新,但其余部分可能由于某种数据库错误/故障/内存耗尽而未插入/更新等等?

mysql 查询是 ALL 还是 Nothing?

对于执行的每个 mysql 查询,是否会顺利插入/更新查询中指定的所有值,或者不会插入/更新任何值?

最佳答案

ACID (原子性、一致性、隔离性、持久性)属性用于描述数据库中的此类行为。原子性仅在我们处理 concurrent modifications 时才重要.为确保一致性,必须达到一定程度的隔离。然而,运行的多个事务越孤立,DBMS 的性能通常就越低。所以有所谓的“isolation level”,它说明了在 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 术语中的原子性仅意味着操作完全完成或完全跳过。它不保证隔离性、一致性或持久性。

关于mysql - 单个查询中的 mysql 多个插入是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com