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

Tại sao phải sử dụng khóa ngoại mà không cần thực hiện thao tác xóa hoặc cập nhật

Tôi nghĩ rằng bạn đang hiểu sai điều gì ON DELETE NO ACTION có nghĩa. Nó không không nghĩa là loại bỏ ràng buộc khóa ngoại.

Khi bạn xóa bản ghi được tham chiếu bằng khóa ngoại, InnoDB có khả năng thực hiện hành động tự động để khắc phục tình huống:

  • nó có thể CASCADE , nghĩa là, xóa bản ghi giới thiệu. (Điều này có ý nghĩa đối với những thứ như user_address.user_id . Nếu bạn xóa cứng một người dùng, có thể bạn cũng muốn xóa tất cả các địa chỉ của người dùng đó.)
  • nó có thể SET NULL , nghĩa là, xóa khóa giới thiệu. (Điều này có thể có ý nghĩa đối với một cái gì đó như file.last_modified_by . Nếu bạn cố tình xóa một người dùng, bạn có thể muốn lần sửa đổi gần đây nhất của tệp trở thành "không xác định".)

Nếu bạn chỉ định NO ACTION , bạn đang nói với InnoDB rằng bạn không muốn nó thực hiện một trong hai hành động này. Vì vậy, InnoDB không thể khắc phục tình hình cho bạn; tất cả những gì nó có thể làm là từ chối DELETE và trả lại lỗi.

Do đó, ON DELETE NO ACTION thực sự giống với ON DELETE RESTRICT (mặc định).

(Lưu ý:trong một số DBMS và trong SQL chuẩn, ON DELETE NO ACTION hơi khác so với ON DELETE RESTRICT :trong đó, ON DELETE NO ACTION có nghĩa là "chấp nhận DELETE trong giao dịch hiện tại, nhưng từ chối toàn bộ giao dịch nếu tôi cố gắng cam kết trước khi khắc phục sự cố ". Nhưng InnoDB không hỗ trợ séc trả chậm, vì vậy nó coi ON DELETE NO ACTION hoàn toàn giống với ON DELETE RESTRICT và luôn từ chối DELETE ngay lập tức .)

Xem §§ 14.2.2.5 "NGOẠI KHÓA Ràng buộc " 13.1.17.2 "Sử dụng Ràng buộc FOREIGN KEY " trong Hướng dẫn tham khảo MySQL 5.6.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham số MyBatis từ HashMap

  2. Lỗi Hibernate khi thực thi DDL qua Tuyên bố JDBC

  3. Sự khác biệt giữa SQL và MySQL là gì

  4. làm thế nào để tạo trang đăng nhập trong ứng dụng android?

  5. CHÈN VÀO Bảng từ nhiều bảng