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

时间:2010-08-28 15:11:08

标签: mysql mysql-workbench

我有一个名为“Users”的表,它包含一些字段,例如Id,ParentId,Name 我想要的是改变这个表以添加新的自连接关系,以便ParentId链接到Id,但ParentId可以为空。 我想在不丢弃表的情况下在mysql中编写这个alter sql statment。

3 个答案:

答案 0 :(得分:2)

alter table Users add constraint parent foreign key (ParentId) references
  Users (Id);

答案 1 :(得分:1)

您的意思是要添加外键约束吗?如果是,请参阅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 :(得分:0)

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

SELECT * FROM users WHERE parent_id NOT IN(SELECT ID FROM users);