1

「Users」というテーブルがあり、Id、ParentId、Nameなどのフィールドが含まれています。
私が欲しいのは、このテーブルを変更して新しい自己結合関係を追加し、ParentIdがIdにリンクするようにすることですが、ParentIdはnull可能です。テーブルを削除せずに、このaltersqlステートメントをmysqlに記述したいと思います。

4

3 に答える 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 usersWHERE parent_idNOT IN(SELECT ID FROM users);

于 2014-03-28T15:42:50.053 に答える