2011-02-05 88 views
1

我有一些表,這種模式插入(簡體):MySQL的未定義外鍵

CREATE TABLE folders(
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    parent INT(11) UNSIGNED NOT NULL, 
    PRIMARY KEY (id), 
    INDEX FK_folders_folders_id (parent), 
    CONSTRAINT FK_folders_folders_id FOREIGN KEY (parent) 
    REFERENCES folders (id) ON DELETE CASCADE ON UPDATE CASCADE 
) 

1個文件夾可以有很多的子文件夾,並可以屬於一個另一個文件夾。如果它是根文件夾,則父母將包含它自己的ID。

問題是:如何創建根文件夾? ID是auto_increment,我只能在插入一行後才能得到它,但我不能在插入行的同時未定義父項。遞歸...

+1

這正是你需要`null`的地方# – Mchl 2011-02-05 16:44:22

回答

1

您可以從父字段中刪除NOT NULL屬性,這樣您可以擁有根。 當然,在這種情況下,您必須通過數據庫保證代碼中的文件夾樹cosistency而不是 。 MySQL參考手冊並不建議用戶要做到這一點:

建議您使用外鍵 引用僅UNIQUE和NOT NULL 鍵。 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

但它總是取決於你。