我有一个包含用户,产品,品牌和类别的MySQL InnoDB数据库。
涉及很多外键 - 从用户,产品品牌,产品类别,品牌用户中添加产品......
每次我尝试删除记录时,外键约束都会失败,然后我会删除另一条记录,而另一条记录会由于其他原因而失败,并且它们都会纠缠不清。
这就是我设置它们的方式:
ON DELETE restrict
ON UPDATE cascade
我不知道为什么,我只是读到以这种方式设置它是好的。
我希望能够完美删除记录,我该怎么做?另一种方法的最终缺点是什么?与此不同?
答案 0 :(得分:1)
正如您所使用的那样 -
ON DELETE RESTRICT
DBMS不允许您删除任何相关记录,而其他记录存在。要在删除父记录时删除所有子表中的所有相关记录,请使用
ON DELETE CASCADE
或
ON DELETE SET NULL
如果要将外键字段设置为NULL
来自doc -
- CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行。 支持ON DELETE CASCADE和ON UPDATE CASCADE。之间 两个表,没有定义几个行动的ON UPDATE CASCADE子句 在父表或子表中的同一列上。注意: 目前,级联外键操作不会激活触发器。
- RESTRICT:拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略 ON DELETE或ON UPDATE子句。
- SET NULL:从父表中删除或更新行,并将子表中的外键列设置为NULL。支持ON DELETE SET NULL和ON UPDATE SET NULL子句。
答案 1 :(得分:-1)
只是不要使用外键constaints。问题解决了。
使用您喜欢的任何编程语言自行管理这类内容要容易得多,而不是试图让MySQL为您完成。
此外,您可以使用SET FOREIGN_KEY_CONSTRAINTS=0;
暂时关闭外键约束。这就是Sequel Pro和phpMyAdmin等所做的事。