Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zmienić akcję referencyjną klucza obcego? (zachowanie)

Stare pytanie, ale dodano odpowiedź, aby można było uzyskać pomoc

Jego dwuetapowy proces:

Załóżmy, że table1 ma klucz obcy z nazwą kolumny fk_table2_id , z ograniczeniem nazwa fk_name i table2 odnosi się do tabeli z kluczem t2 (coś takiego jak poniżej na moim schemacie ).

   table1 [ fk_table2_id ] --> table2 [t2]

Pierwszy krok , USUŃ stare OGRANICZENIE:(odniesienie )

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

ograniczenie notice zostało usunięte, kolumna nie została usunięta

Drugi krok , DODAJ nowe WIĄZANIE:

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

dodawanie ograniczenia, kolumna już tam jest

Przykład:

Mam UserDetails tabela odnosi się do Users tabela:

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

Pierwszy krok:

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

Drugi krok:

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)  

wynik:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Które zapytanie SQL jest lepsze, MATCH AGAINST czy LIKE?

  2. Zwiększ pole bazy danych o 1

  3. Samodzielny serwer MySQL

  4. Wyczyść pamięć podręczną zapytań MySQL bez restartowania serwera

  5. Jak zapobiegać przekroczeniu limitu czasu połączenia w przypadku dużych importów MySQL