如果我试图从表中删除多行,并且由于数据库关系而无法删除其中一行,会发生什么?
不会删除不受关系约束的行吗?或整个删除失败?
答案 0 :(得分:2)
在MySQL中,如果设置了外键约束,则在尝试插入不存在的ID或尝试删除现有ID时,查询将失败。
换句话说,您的删除将失败。
答案 1 :(得分:1)
如果是单个删除语句,则整个删除将失败。
答案 2 :(得分:0)
所有行都会删除就好了。但是,您应该确保您的程序删除相关的行,否则会丢失帖子/记录/随后可能出现的任何内容。
答案 3 :(得分:0)
这里有一个更普遍的问题:
答案基本上是“他们都没有受到影响,即使已经成功了”。
内部发生的事情相当复杂。 InnoDB支持事务保存点,数据库在当前事务中的语句开头创建隐式保存点。如果语句部分失败,则回滚发生回隐式保存点。这意味着它看起来似乎从未发生过声明(除非人们坚持使用READ_UNCOMMITTED隔离级别,如果他们在意,他们不应该这样做。)
无论您是否使用显式交易,都会发生这种情况。如果使用显式事务,则不回滚当前事务(除了某些类型的错误,例如死锁和锁等待超时,它必须执行以允许断开死锁),而只是回滚到目前为止声明的开头。