代码之家  ›  专栏  ›  技术社区  ›  Amr Elgarhy

如何修改表以添加自联接关系?

  •  0
  • Amr Elgarhy  · 技术社区  · 15 年前

    我有一个名为“用户”的表,它包含一些字段,如id、parentid、name。
    我想修改这个表以添加新的自联接关系,以便parentID链接到id,但是parentID可以为空。 我想在mysql中编写这个alter sql语句,而不删除表。

    3 回复  |  直到 11 年前
        1
  •  1
  •   Mike    15 年前

    您的意思是要添加一个外键约束吗?如果是,请参阅 FOREIGN KEY Constraints 博士学位。下面是一个例子,从创建一个简单的表开始:

    CREATE TABLE `users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `parent_id` int(10) unsigned DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
    

    为添加索引 parent_id 专栏:

    ALTER TABLE users
    ADD INDEX `parent_id` (`parent_id`);
    

    添加外键约束:

    ALTER TABLE users
    ADD CONSTRAINT `fk_parent_id`
    FOREIGN KEY `parent_id` (`parent_id`)
    REFERENCES `users` (`id`);
    

    显示新表结构:

    SHOW CREATE TABLE users;
    
    CREATE TABLE `users` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `parent_id` int(10) unsigned DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `parent_id` (`parent_id`),
      CONSTRAINT `fk_parent_id`
        FOREIGN KEY (`parent_id`)
        REFERENCES `users` (`id`)
    ) ENGINE=InnoDB;
    
        2
  •  2
  •   user262976    15 年前
    alter table Users add constraint parent foreign key (ParentId) references
      Users (Id);
    
        3
  •  0
  •   Chad Kieffer    11 年前

    请注意,如果使用的表包含数据,则如果存在孤立的关系,则创建外键关系将失败。在创建外键之前查找并修复孤立项!

    从中选择* users 在哪里? parent_id 不在(从中选择ID 用户 ;