例如:
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程序产生影响???
我希望你明白。
答案 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服务器的工作 验证日期。
不是可爱吗?