是否可以在 MySQL 中暂时禁用约束?
我有两个 Django 模型,每个模型都具有到另一个的外键。由于外键约束,删除模型实例将返回错误:
cursor.execute("DELETE FROM myapp_item WHERE n = %s", n)
transaction.commit_unless_managed() #a foreign key constraint fails here
cursor.execute("DELETE FROM myapp_style WHERE n = %s", n)
transaction.commit_unless_managed()
是否可以暂时禁用约束并仍然删除?
尝试DISABLE KEYS
或
SET FOREIGN_KEY_CHECKS=0;
确保
SET FOREIGN_KEY_CHECKS=1;
后。
要全局关闭外键约束,请执行以下操作:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
并记得在完成后将其重新设置
SET GLOBAL FOREIGN_KEY_CHECKS=1;
警告:仅在进行单用户模式维护时才应这样做。因为这可能导致数据不一致。例如,当您使用 mysqldump 输出上传大量数据时,这将非常有帮助。
我通常只在想截断表时才禁用外键约束,并且由于我不断回到这个答案,所以这是为了将来我:
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE TABLE table;
SET FOREIGN_KEY_CHECKS=1;