1

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

4

3 回答 3

3
alter table Users add constraint parent foreign key (ParentId) references
  Users (Id);
于 2010-08-28T15:21:05.093 回答
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;
于 2010-08-28T15:21:24.810 回答
0

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

SELECT * FROM usersWHERE parent_idNOT IN (SELECT ID FROM users);

于 2014-03-28T15:42:50.053 回答