MySQL - 在同一个表中受主键约束的外键,错误#1452

时间:2015-04-23 02:37:32

标签: mysql

我创建了一个表,其中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_IDNULL的记录时,出现错误:

#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

2 个答案:

答案 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上?