Php 使用未定义的外键插入MySQL

Php 使用未定义的外键插入MySQL,php,mysql,Php,Mysql,我有一些具有这种模式的表(简化): 1文件夹可以有多个子文件夹,并且可以属于另一个文件夹。如果它是根文件夹,那么父文件夹将包含它自己的ID 问题是:如何创建根文件夹?ID是自动递增的,我只能在插入一行后获得它,但在未定义父项的情况下无法插入行。递归…您可以从父字段中删除NOTNULL属性,这样您就可以拥有根。 当然,在这种情况下,您必须在代码中保证文件夹树的一致性,而不是 通过数据库。 MySQL参考手册不建议用户这样做: 建议您使用外键 该引用仅是唯一的,而不是唯一的 空键 但这取决于您。您可

我有一些具有这种模式的表(简化):

1文件夹可以有多个子文件夹,并且可以属于另一个文件夹。如果它是根文件夹,那么父文件夹将包含它自己的ID


问题是:如何创建根文件夹?ID是自动递增的,我只能在插入一行后获得它,但在未定义父项的情况下无法插入行。递归…

您可以从父字段中删除NOTNULL属性,这样您就可以拥有根。 当然,在这种情况下,您必须在代码中保证文件夹树的一致性,而不是 通过数据库。 MySQL参考手册不建议用户这样做:

建议您使用外键 该引用仅是唯一的,而不是唯一的 空键


但这取决于您。

您可以从父字段中删除NOTNULL属性,这样您就可以拥有根。 当然,在这种情况下,您必须在代码中保证文件夹树的一致性,而不是 通过数据库。 MySQL参考手册不建议用户这样做:

建议您使用外键 该引用仅是唯一的,而不是唯一的 空键


但这总是取决于您。

这正是您需要的
null
为什么
parent
文件夹在根目录中时是自己的ID?插入一个零(0)不是更好吗?不可能的原因是有外键的ID不是NULL(主键)关闭的主题:读这个:如果需要的话,考虑使用嵌套集合模型,它可以让你省心这正是你需要的
null
为什么
parent
文件夹在根目录下时它是自己的ID?插入一个零(0)不是更好吗?不可能的原因是有外键的ID不是NULL(主键)关闭的主题:读这个:并且考虑使用嵌套的集合模型,如果你需要的话,它可以免去你的头痛。
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
)