2010-05-08 106 views
2

如果我试图从表中删除多行,并且其中一行由于数据库关系而无法删除,会发生什么情况?mysql删除和数据库关系

不受关系约束的行是否仍会被删除?或者将整个删除失败?

+2

你可以用2个虚拟表格相当快地测试它... – 2010-05-08 03:07:03

回答

1

如果是单个删除语句,那么整个删除将失败。

2

在MySQL中,如果设置了外键约束,如果尝试插入不存在的ID或尝试删除现有ID,查询将失败。

换句话说,您的删除将失败。

0

所有的行都会删除就好了。但是,您应该确保您的程序删除了相关的行,否则会丢失帖子/记录/可能发生的任何事情。

0

这里有一个更普遍的问题:

  • 如果我这样做会影响多行的SQL语句,并修改了一些行后遇到错误时,会发生什么情况。

答案本质上是“它们都没有受到影响,甚至已经成功了”。

内部发生的事情相当复杂。 InnoDB支持事务保存点,并且数据库在当前事务中语句的开始处创建隐式保存点。如果语句中途失败,则会回滚到隐式保存点。这意味着它看起来像从来没有发生过的声明(除非人们坚持使用READ_UNCOMMITTED隔离级别,如果他们不在意它们不应该这样做)。

无论您是否使用显式事务,都会发生这种情况。如果您使用显式事务,则当前事务不会回退(除了某些类型的错误,例如死锁和锁等待超时,它必须执行以允许中断被阻止),而只是回滚到最远声明的开始。