我有一个名为“Users”的表,它包含一些字段,例如 Id、ParentId、Name。
我想要的是更改此表以添加新的自连接关系,以便 ParentId 链接到 Id,但 ParentId 可以为空。我想在不删除表的情况下在 mysql 中编写这个 alter sql 语句。
问问题
1701 次
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 users
WHERE parent_id
NOT IN (SELECT ID FROM users
);
于 2014-03-28T15:42:50.053 回答