我必须从mysql的一个表中删除许多记录。但有些记录与其他记录有外键关系。因此,当我触发删除命令时,它显示有关外键的错误,并回滚整个删除事务(这很自然)。在这种情况下,我必须过滤那些在其他表中使用(引用)的记录,然后删除。有没有为什么删除记录而不进行过滤?表示如果我触发删除命令,删除那些未使用(引用)的记录,并跳过在另一个表中使用的记录,而不显示错误或回滚。
答案 0 :(得分:0)
使用left join
检查关系并删除所有无关系的记录
delete t1
from tableToDeleteFrom t1
left join referenceTable t2 on t1.foreignKeyColumn = t2.keyColumn
where t2.keyColumn is null
and <your delete conditions>
如果您想要快速而肮脏的解决方案,可以使用ignore
关键字来忽略执行期间的错误:
IGNORE关键字使MySQL在删除行的过程中忽略错误。 (解析阶段遇到的错误以通常的方式处理。)由于使用IGNORE而被忽略的错误将作为警告返回。
delete ignore from tableToDeleteFrom
where <your delete conditions>