Как изменить таблицу, чтобы добавить отношение самостоятельного соединения? - PullRequest
0 голосов
/ 28 августа 2010

У меня есть таблица «Users», в которой есть некоторые поля, такие как Id, ParentId, Name.
Что я хочу, так это изменить эту таблицу, чтобы добавить новое отношение самостоятельного соединения, чтобы ParentId связывался с Id, но ParentId обнулялся. Я хочу написать это alter sql statment в mysql, не опуская таблицу.

Ответы [ 3 ]

2 голосов
/ 28 августа 2010
alter table Users add constraint parent foreign key (ParentId) references
  Users (Id);
1 голос
/ 28 августа 2010

Вы имеете в виду, что хотите добавить ограничение внешнего ключа? Если да, см. Документы 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;
0 голосов
/ 28 марта 2014

Обратите внимание, что если вы работаете с таблицей, содержащей данные, создание отношения внешнего ключа завершится неудачно, если существуют потерянные отношения.Найти и исправить сирот до создания внешних ключей!

SELECT * FROM users WHERE parent_id NOT IN (SELECT ID FROM users);

...