Как изменить таблицу, чтобы добавить отношение к себе?

StackOverflow https://stackoverflow.com/questions/3591245

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть таблица под названием «пользователи», он содержит некоторые поля, такие как ID, ParentId, имя.
То, что я хочу, - это изменить эту таблицу, чтобы добавить новую связь со связью, чтобы соединить ParentId на ID, но ParentId NULLBALE. Я хочу написать эту альтерную ставку SQL в MySQL без падения стола.

Это было полезно?

Решение

Вы имеете в виду, что вы хотите добавить ограничение внешнего ключа? Если это так, см. Ограничения внешних ключей Документы. Вот пример, начиная с создания простой таблицы:

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