Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie ändere ich die Fremdschlüssel-Referenzaktion? (Verhalten)

Alte Frage, aber Antwort hinzugefügt, damit man Hilfe bekommen kann

Zweistufiger Prozess:

Angenommen, eine table1 hat einen Fremdschlüssel mit dem Spaltennamen fk_table2_id , mit Einschränkung Name fk_name und table2 wird auf die Tabelle mit dem Schlüssel t2 verwiesen (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`;  

Notice Constraint 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;  

Einschränkung hinzufügen, Spalte ist bereits vorhanden

Beispiel:

Ich habe 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
: