我有一个名为“用户”的表,它包含一些字段,例如ID,parentID,名称。
我想要的是更改此表以添加新的自加入关系,以便将parentid链接到ID,但是parentID是无效的。我想在MySQL中编写此Alter SQL Statment,而不会放下表。

有帮助吗?

解决方案

您是说要添加外键约束吗?如果是这样,请参阅 外国钥匙限制 文档。这是一个示例,从创建一个简单的表格开始:

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;

其他提示

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

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

选择 * users 在哪里 parent_id 不在(从中选择ID users);

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top