2015-04-23 116 views
0

我創建其中cat_parent_id是一個外鍵的主鍵cat_id限制的表,使用此約束:MySQL的 - 外鍵在同一個表的主鍵,錯誤#1452

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只有

+1

你是不是要把FK放在'cat_parent_id'上? –

+0

@AaronKent這就是我的意思是... thx指出修復 – bsapaka

+0

太棒了。你介意把我的答案標爲正確嗎? –

回答

0

這將創建一個循環外鍵,這將防止任何插入到表中。

FOREIGN KEY(cat_id) REFERENCES categories(cat_id), 

編輯:也許你打算把cat_parent_id上的PK?

0

您有一個沒有父級的根記錄。對於這個,你必須先禁用外鍵約束。

SET FOREIGN_KEY_CHECKS=0; 

插入記錄。

然後不要忘記從現在開始重新enble外鍵約束

SET FOREIGN_KEY_CHECKS=1; 

然後自己,請確保您的刀片包括現有的父。

How can the foreign key constraint fail when there is no foreign key to begin with? Is the constraint only possible if null is not allowed?

如果要添加其他沒有FK值的記錄,請確保允許NULL。