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.

War es hilfreich?

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);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top