我创建了一个表,其中cat_parent_id
是外键受主键cat_id
的约束,使用:
CREATE TABLE categories (
cat_id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cat_parent_ID SMALLINT,
cat_name VARCHAR(40)
INDEX cat_id(cat_id),
FOREIGN KEY(cat_id) REFERENCES categories(cat_id),
);
当我尝试插入cat_parent_ID
为NULL
的记录时,出现错误:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`myDatabase`.`categories`, CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`cat_id`) REFERENCES `categories` (`cat_id`))
当没有外键开始时,外键约束如何失败?如果不允许null,是否只能使用约束?
如果禁用约束,我只能成功插入记录,这不是我想要的。我需要parent_id
是可选的,如果它有值,那么它只是现有的cat_id
答案 0 :(得分:0)
您有一个没有父级的根记录。对于这个,您必须首先禁用外键约束。
SET FOREIGN_KEY_CHECKS=0;
插入记录。
然后不要忘记重新使用外键约束
SET FOREIGN_KEY_CHECKS=1;
然后从现在开始,确保您的插入包含现有的父级。
如果没有外键,外键约束如何失败 开始?如果不允许null,是否只能使用约束?
如果要添加其他没有FK值的记录,请确保允许NULL。
答案 1 :(得分:0)
这将创建一个循环外键,这将阻止任何插入表。
FOREIGN KEY(cat_id) REFERENCES categories(cat_id),
编辑:也许你打算把PK放在cat_parent_id
上?