2013-06-19 44 views
0

我有一个为例父表和每个父母能有一个孩子,所以家长有children_id空外键MySQL不能为空

我想给children_id设置为0,如果没有孩子,但id为0的孩子是不存在的,所以我有这个错误

Cannot add or update a child row: a foreign key constraint fails (parent, CONSTRAINT `parent_ibfk_4` FOREIGN KEY (`children_id`) REFERENCES `children` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) 

编辑: 我的情况进行了仔细例子

我有一个菜单表,但菜单可以指向其他菜单,所以我在我的菜单表中有一个menu_id,menu_id链接到t他的菜单ID,但第一个菜单不能有menu_id

我希望这是做:)

感谢

+2

这似乎有点落后删除menu_id。通常情况下,在'children'表中有一个外键,它指向'parent'表,而不是指向'children'的'parent'中的FK。 –

+0

我添加了另一个例子 – Ajouve

回答

0

好一个好办法,外键是由强制约束数据库,所以数据保持一致。没有解决方法。

0

我看到两个选项:

  1. 取下表模式的FOREIGN KEY约束。外键约束确保所有元素都有一个有效的父项。但层次结构的根元素没有父项,所以你不能要求这样做。

  2. 添加一个ID为0的孩子,并将children_id设置为此。代码的其余部分必须专门处理这个孩子,因为它代表了层次结构的根。

0

感谢您的答案,但我想我找到了一个解决方案:创建一个表,加入2个菜单,然后从菜单表