sql >> Databasteknik >  >> RDS >> Mysql

Hur ändrar man referensåtgärden för främmande nyckel? (beteende)

Gammal fråga men lägger till svar så att man kan få hjälp

Dess tvåstegsprocess:

Antag, en table1 har en främmande nyckel med kolumnnamn fk_table2_id , med begränsning namn fk_name och table2 är refererad tabell med nyckel t2 (något liknande nedan i mitt diagram ).

   table1 [ fk_table2_id ] --> table2 [t2]

Första steget , SLOPP gammal BEGRÄNSNING:(referens )

ALTER TABLE `table1` 
DROP FOREIGN KEY `fk_name`;  

meddelandebegränsning raderas, kolumn tas inte bort

Andra steget , LÄGG TILL ny BEGRÄNSNING:

ALTER TABLE `table1`  
ADD CONSTRAINT `fk_name` 
    FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;  

lägger till begränsning, kolumnen finns redan där

Exempel:

Jag har en UserDetails Tabell hänvisar till Users tabell:

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`)
:
:

Första steget:

mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
Query OK, 1 row affected (0.07 sec)  

Andra steget:

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)  

resultat:

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
:


  1. Hur man ställer in intervallutdataformatet i PostgreSQL

  2. Introduktion till temporära tabeller i SQL Server

  3. Viktiga hälsokontroller för dina MySQL Source-Replica Servers

  4. Hur ställer man in tabellnamn i dynamisk SQL-fråga?