【问题标题】:What kind of errors exists in SQL querys for ROLLBACK?ROLLBACK 的 SQL 查询存在哪些错误?
【发布时间】:2011-06-05 02:19:27
【问题描述】:

例如:

insert into table( a, b ) values ('a','b') could generate the following error:

**a-b duplicate entry**

但是在这里我可以忽略这个错误,选择这个值的 ID,然后使用这个 ID:

select ID from table where a = 'a' and b = 'b'
insert into brother( table ) values (ID)

我终于可以提交程序了。如果我需要 ID,请查看此错误与回滚无关。

问题是:ROLLBACK PROCEDURE 会导致什么样的错误???

希望你能理解。

【问题讨论】:

    标签: sql mysql transactions commit rollback


    【解决方案1】:

    我想您是在问,“INSERT 语句会导致哪些类型的错误会使 MySQL 回滚事务?”

    违反任何约束的 INSERT 将导致回滚。它可能是您概述的外键约束,但也可能是 UNIQUE 约束或 CHECK 约束。 (一个 CHECK 约束可能会在 MySQL 中作为触发器实现。)

    尝试插入无效值(不可为空的列中的 NULL、超出范围的数字、无效日期)可能会导致回滚。但它们可能不会,具体取决于服务器配置。 (请参阅下面的链接。)

    INSERT 也可能因为缺少权限而失败。这也会导致回滚。

    在其他平台上会导致回滚的某些条件不会导致 MySQL 上的回滚。

    MySQL 出现错误时的选项 发生是停止语句 中间或恢复以及 可能从问题和 继续。默认情况下,服务器 遵循后者的路线。这意味着, 例如,服务器可能 将非法值强制为最接近的值 法律价值。

    那句话来自How MySQL Deals with Constraints

    MySQL 文档中我最喜欢的一句话,1.8.6.2. Constraints on Invalid Data

    MySQL 使您能够存储某些 不正确的日期值到 DATE 和 DATETIME 列(例如 '2000-02-31' 或“2000-02-00”)。这个想法是 不是 SQL 服务器的工作 验证日期。

    这不是可爱吗?

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 2022-06-28
      • 2017-09-17
      • 2017-02-08
      • 2018-06-16
      • 1970-01-01
      • 2014-01-22
      • 2017-01-05
      • 1970-01-01
      相关资源
      最近更新 更多