「Users」というテーブルがあり、Id、ParentId、Nameなどのフィールドが含まれています。
私が欲しいのは、このテーブルを変更して新しい自己結合関係を追加し、ParentIdがIdにリンクするようにすることですが、ParentIdはnull可能です。テーブルを削除せずに、このaltersqlステートメントをmysqlに記述したいと思います。
1701 次
3 に答える
3
alter table Users add constraint parent foreign key (ParentId) references
Users (Id);
于 2010-08-28T15:21:05.093 に答える
1
外部キー制約を追加したいということですか?その場合は、 FOREIGNKEYConstraintsのドキュメントを参照してください。簡単なテーブルの作成から始めた例を次に示します。
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 に答える