ROLLBACK的SQL查询中存在哪些错误?

时间:2011-01-07 05:23:29

标签: sql mysql transactions commit rollback

例如:

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程序产生影响???

我希望你明白。

1 个答案:

答案 0 :(得分:0)

我想你在问,“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服务器的工作   验证日期。

不是可爱吗?