2011-02-05 84 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

但它总是取决于你。