2

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

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

4

4 回答 4

2

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

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

于 2010-05-08T03:02:55.363 回答
1

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

于 2010-05-08T03:03:14.177 回答
0

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

于 2010-05-08T03:03:21.243 回答
0

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

  • 如果我执行影响多行的 SQL 语句,并且在修改某些行后遇到错误,会发生什么情况。

答案基本上是“他们都没有受到影响,即使是已经成功的”。

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

无论您是否使用显式事务,都会发生这种情况。如果您使用显式事务,则当前事务不会回滚(除了某些类型的错误,例如死锁和锁等待超时,它必须这样做才能使死锁被打破),而只会回滚至声明的开头。

于 2010-05-08T22:24:09.177 回答