テーブルを変更して自己結合関係を追加する方法は?
-
01-10-2019 - |
質問
「ユーザー」と呼ばれるテーブルがあります。ID、ParentID、名前などのフィールドが含まれています。
私が望んでいるのは、このテーブルを変更して新しいセルフ結合関係を追加して、IDへのderperidリンクを追加することですが、departidは音感バーです。テーブルをドロップせずに、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);
データを含むテーブルを使用している場合、孤児の関係が存在する場合、外部のキー関係の作成は失敗することに注意してください。外国の鍵を作成する前に、孤児を見つけて修正してください!
from]を選択します users
どこ parent_id
in in(select id from users
);
所属していません StackOverflow