2011-01-07 62 views
0

例如:ROLLBACK的SQL查询中存在哪些类型的错误?

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 ???

我希望你能理解。

回答

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年2月31日' 或 '2000-02-00')。这个想法是,它 不是SQL服务器的工作,以 验证日期。

是不是可爱