Mysql 检测触发器内外键引用约束

Mysql 检测触发器内外键引用约束,mysql,triggers,foreign-keys,constraints,referential-integrity,Mysql,Triggers,Foreign Keys,Constraints,Referential Integrity,在触发器中,如何检测外键引用约束何时阻止删除发生 但是,如果myTable的另一个表中存在外键,我希望对myTable执行delete语句,而不是从myTable中删除行,而是修改myTable中记录的列尝试删除的位置。是否希望在MyTable上有一种delete-触发器,当您尝试删除MyTable中的一行失败时,该触发器会作出反应,或者您的意思是在另一个(!)表上有一个触发器,作为执行的一部分,该触发器会尝试删除MyTable中的一行,当这失败时,是否还有其他原因?后者是我从你的第一句话中理解

在触发器中,如何检测外键引用约束何时阻止删除发生


但是,如果myTable的另一个表中存在外键,我希望对myTable执行delete语句,而不是从myTable中删除行,而是修改myTable中记录的列尝试删除的位置。

是否希望在
MyTable
上有一种
delete
-触发器,当您尝试删除
MyTable
中的一行失败时,该触发器会作出反应,或者您的意思是在另一个(!)表上有一个触发器,作为执行的一部分,该触发器会尝试删除
MyTable
中的一行,当这失败时,是否还有其他原因?后者是我从你的第一句话中理解的,但你的问题的其余部分听起来更像是指第一种情况;因为他们有两种不同的答案(第一种情况在MySQL中是不可能的,第二种情况是),我想确保我正确理解它。@Solarflare你的第一句话。从
MyTable
中删除记录,如果由于约束而失败,请在
MyTable
中更新该记录。遗憾的是,这是不可能的。您可以在应用程序/脚本中捕获异常并在那里进行处理。但是,如果要删除多个,则如果只有一个失败,则不会删除任何一个。一个巧妙的技巧是首先用新值更新行,然后使用
delete ignore
删除行(反之亦然)。如果删除了这些行,则它们是否获得新值无关紧要,如果无法删除,则它们现在具有新值<代码>忽略可防止出现错误(因此可以删除多行)。这只能通过你的应用程序完成,需要2次查询和时间。谢谢Solarflare,至少现在我知道我应该停止搜索这样的解决方案(这真的很好!),开始寻找其他解决方案。另外,感谢您对其他解决方案的建议。