Wie eine Tabelle zu ändern, um ein Selbst Beziehung verbinden hinzufügen?
-
01-10-2019 - |
Frage
Ich habe eine Tabelle mit dem Namen „Benutzer“ es enthält einige Felder wie Id, ParentId, Namens-.
Was ich will, ist diese Tabelle zu ändern, neues Selbst hinzuzufügen verbindet Beziehung, so dass ParentId Link zu Id, aber ParentId NULL-Werte zugelassen.
Ich mag diese alte SQL-Anweisung in MySQL schreiben, ohne die Tabelle zu löschen.
Lösung
Sie meinen, dass Sie einen Fremdschlüssel hinzufügen? Wenn ja, finden Sie in den Fremdschlüssel-Beschränkungen docs. Hier ist ein Beispiel, beginnend mit einer einfachen Tabelle zu erstellen:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Fügen Sie einen Index für die parent_id
Spalte:
ALTER TABLE users
ADD INDEX `parent_id` (`parent_id`);
Fügen Sie den Fremdschlüssel:
ALTER TABLE users
ADD CONSTRAINT `fk_parent_id`
FOREIGN KEY `parent_id` (`parent_id`)
REFERENCES `users` (`id`);
Zeigen Sie die neue Tabellenstruktur:
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;
Andere Tipps
alter table Users add constraint parent foreign key (ParentId) references
Users (Id);
Beachten Sie, wenn Sie mit einer Tabelle arbeiten, die Daten, Fremdschlüsselbeziehung Schöpfung enthält, wird fehlschlagen, wenn verwaiste Beziehungen bestehen. Suchen und Beheben von Waisen vor dem Erstellen von Fremdschlüsseln!
SELECT * FROM users
WHERE parent_id
NOT IN (SELECT ID FROM users
);