Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thay đổi hành động tham chiếu khóa ngoại? (hành vi)

Câu hỏi cũ nhưng thêm câu trả lời để mọi người có thể nhận trợ giúp

Quy trình hai bước của nó:

Giả sử, một table1 khóa ngoại với tên cột fk_table2_id , với ràng buộc tên fk_nametable2 là bảng được tham chiếu với khóa t2 ( một cái gì đó giống như bên dưới trong sơ đồ của tôi ).

   table1 [ fk_table2_id ] --> table2 [t2]

Bước đầu tiên , DROP CONSTRAINT cũ:( tham chiếu )

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

ràng buộc thông báo bị xóa, cột không bị xóa

Bước thứ hai , THÊM CONSTRAINT mới:

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

thêm ràng buộc, cột đã ở đó

Ví dụ:

Tôi có UserDetails bảng tham chiếu đến Users bảng:

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

Bước đầu tiên:

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

Bước thứ hai:

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)  

kết quả:

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. Nhóm mệnh đề WHERE trong Codeigniter

  2. Hướng dẫn về MySQL - Định cấu hình và quản lý SSL trên máy chủ MySQL của bạn

  3. SQL SELECT để lấy N số nguyên dương đầu tiên

  4. Tăng trường cơ sở dữ liệu lên 1

  5. Chuỗi được phân tách bằng dấu phẩy trong MySQL thành bảng tạm thời