mysql删除和数据库关系

时间:2010-05-08 02:57:25

标签: mysql relational-database foreign-key-relationship

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

不会删除不受关系约束的行吗?或整个删除失败?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

所有行都会删除就好了。但是,您应该确保您的程序删除相关的行,否则会丢失帖子/记录/随后可能出现的任何内容。

答案 3 :(得分:0)

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

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

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

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

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