Alte Frage, aber Antwort hinzufügen, damit man Hilfe bekommen kann
Sein zweistufiger Prozess:
Nehmen wir an , ein table1
eine hat Fremdschlüssel mit Spaltennamen fk_table2_id
, mit Einschränkung Namen fk_name
und table2
bezeichnet Tabelle mit Schlüssel t2
( so etwas wie unten in meinem Diagramm ).
table1 [ fk_table2_id ] --> table2 [t2]
Erster Schritt , DROP old CONSTRAINT: ( Referenz )
ALTER TABLE `table1`
DROP FOREIGN KEY `fk_name`;
Hinweisbeschränkung wird gelöscht, Spalte wird nicht gelöscht
Zweiter Schritt , Neue Einschränkung hinzufügen:
ALTER TABLE `table1`
ADD CONSTRAINT `fk_name`
FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;
Wenn Sie eine Einschränkung hinzufügen, ist die Spalte bereits vorhanden
Beispiel:
Ich habe eine UserDetails
Tabelle bezieht sich auf Users
Tabelle:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
:
:
Erster Schritt:
mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)
Zweiter Schritt:
mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id`
-> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
Query OK, 1 row affected (0.02 sec)
Ergebnis:
mysql> SHOW CREATE TABLE UserDetails;
:
:
`User_id` int(11) DEFAULT NULL,
PRIMARY KEY (`Detail_id`),
KEY `FK_User_id` (`User_id`),
CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES
`Users` (`User_id`) ON DELETE CASCADE
:
Sie können dies in einer Abfrage tun, wenn Sie bereit sind, den Namen zu ändern:
Dies ist nützlich, um Ausfallzeiten zu minimieren, wenn Sie einen großen Tisch haben.
quelle
quelle
ALTER TABLE table_name ADD
...ON DELETE RESTRICT
SHOW CREATE TABLE
.Denken Sie daran, dass MySQL nach dem Löschen des Fremdschlüssels einen einfachen Index für eine Spalte führt. Wenn Sie also die Spalte "Referenzen" ändern müssen, sollten Sie dies in drei Schritten tun
drop index
Klausel)quelle
Sie können einfach eine Abfrage verwenden, um alle zu regieren:
ALTER TABLE products DROP FOREIGN KEY oldConstraintName, ADD FOREIGN KEY (product_id, category_id) REFERENCES externalTableName (foreign_key_name, another_one_makes_composite_key) ON DELETE CASCADE ON UPDATE CASCADE
quelle
Ich musste ein paar FKs ändern, also schrieb ich etwas, um die Aussagen für mich zu machen. Ich dachte, ich würde teilen:
quelle