jul*_*jul 605 mysql sql django django-models
是否可以暂时禁用MySQL中的约束?
我有两个Django模型,每个模型都有一个ForeignKey到另一个.由于ForeignKey约束,删除模型的实例会返回错误:
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()
Run Code Online (Sandbox Code Playgroud)
是否可以暂时禁用约束并删除?
And*_*ell 1403
试试DISABLE KEYS或
SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
确保
SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)
后.
ber*_*iey 139
要全局关闭外键约束,请执行以下操作:
SET GLOBAL FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)
并记得在完成后将其设置回来
SET GLOBAL FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)
警告:只有在进行单用户模式维护时才应执行此操作.因为它可能导致数据不一致.例如,当您使用mysqldump输出上载大量数据时,它将非常有用.
Ant*_*oCS 50
我通常只在我要截断表时才禁用外键约束,因为我不断回到这个答案,这是为了将来我:
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE TABLE table;
SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)
dna*_*irl 26
不是禁用约束,而是永久地将其修改为ON DELETE SET NULL.这将完成类似的事情,你不必打开和关闭键检查.像这样:
ALTER TABLE tablename1 DROP FOREIGN KEY fk_name1; //get rid of current constraints
ALTER TABLE tablename2 DROP FOREIGN KEY fk_name2;
ALTER TABLE tablename1
ADD FOREIGN KEY (table2_id)
REFERENCES table2(id)
ON DELETE SET NULL //add back constraint
ALTER TABLE tablename2
ADD FOREIGN KEY (table1_id)
REFERENCES table1(id)
ON DELETE SET NULL //add back other constraint
Run Code Online (Sandbox Code Playgroud)
请阅读此内容(http://dev.mysql.com/doc/refman/5.5/en/alter-table.html)和此内容(http://dev.mysql.com/doc/refman/5.5/en /create-table-foreign-keys.html).
Uma*_*riq 13
要全局关闭外键约束:
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
Run Code Online (Sandbox Code Playgroud)
并用于活动外键约束
SET GLOBAL FOREIGN_KEY_CHECKS = 1;
Run Code Online (Sandbox Code Playgroud)
小智 9
一个非常简单的解决方案,使用phpmyadmin:在你的表中,转到SQL选项卡,在编辑要运行的SQL命令后,在GO旁边有一个复选框'启用外键检查'.禁用此复选框并运行你的SQL.然后会自动重新检查.
对我来说只是SET FOREIGN_KEY_CHECKS=0;不够。我仍然有一个com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException.
我不得不添加ALTER TABLE myTable DISABLE KEYS;.
所以:
SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE myTable DISABLE KEYS;
DELETE FROM myTable;
ALTER TABLE myTable ENABLE KEYS;
SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)
在phpMyAdmin中,您可以选择多行,然后单击删除操作。您将进入一个列出删除查询的屏幕。它看起来像这样:
请取消选中“启用外键检查”复选框,然后单击Yes执行它们。
即使存在 ON DELETE 限制约束,这也使您能够删除行。
| 归档时间: |
|
| 查看次数: |
628438 次 |
| 最近记录: |