当前位置: 首页 > 面试题库 >

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

司寇山
2023-03-14
问题内容

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

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

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

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

mysql查询是全部还是什么?

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


问题答案:

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术语中的原子性仅表示该操作已完全完成或已完全跳过。它不保证隔离,一致性或持久性。



 类似资料:
  • 问题内容: 当我只为单个列插入数据时,我正在寻找一种进行多行插入的方法。 这是示例表: 我希望能够在每一行的名称列中插入类似(“ admin”,“ author”,“ mod”,“ user”,“ guest”)的内容。 MySQL文档显示多个插入应采用以下格式: 但是我的声明最终看起来像这样: 而且我得到以下信息: 错误1136(21S01):列计数与第1行的值计数不匹配 这意味着它认为我正在尝

  • 问题内容: 您好,我正在制作一个在pdo中进行多次插入的类。 是这样的 搜索后,我发现我必须建立类似 然后用这个执行 ,其中是 问题是我还得到一个错误就如何解决呢? 这是我正在做的一小段。 问题答案: 避免并发症的简单方法是这样的 但是,这将多次执行该语句。因此,最好创建一个较长的单个查询来执行此操作。 这是我们如何执行此操作的示例。

  • 问题内容: 让我们假设我必须将一个包含许多fk的表插入到表中,只是为了在 错误的语句 下面进行解释: 因此,基本上要插入的值来自不同的子查询,是否有可能实现这种行为? 问题答案:

  • 子查询如图所属,是能够查询到数据的 如果加上 where like 条件就查不出数据了

  • 问题内容: 我有一个SQL查询,我想在单个查询中插入多行。所以我用了类似的东西: 问题是当我执行此查询时,我想检查是否应检查例如上面的键(不是),如果已经存在,则应更新相应的整行,否则将其插入。 例如,在下面的示例中,如果数据库中已经存在该行,则应更新整行,而不考虑字段的数量。再次,如果不存在,则应插入该行。 我想到使用: 这是陷阱。我对如何进行感到困惑和困惑。我一次有多个行要插入/更新。请给我一

  • 我需要根据一个子查询的结果更新一个表,该子查询带来了1个以上的值,但在下面的查询中,我得到错误返回“subquery returns mouth 1 row”。我想知道是否有可能做一个“循环”,以更新值与我下面的子查询中呈现的每个结果。 完成查询 返回2个或更多值的子查询。 结果 在理想的场景中,我的查询将执行第一个值,在第二个之后...第三个之后...而不重复前面的值。