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