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

Thứ tự xóa với các ràng buộc khóa ngoại,

Về mặt chính thức, bạn không có quyền kiểm soát thứ tự của các hoạt động xếp tầng. Bạn có thể lạm dụng một số không có giấy tờ tuy nhiên hành vi:

  • đối với MySQL 5.5, các khóa ngoại được thực thi theo thứ tự mà chúng đã được tạo, vì vậy hãy thả và tạo lại fk_category_org -constraint nên hoạt động
  • đối với MySQL 5.6+, các khóa ngoại được thực thi theo thứ tự từ vựng trong tên của chúng, vì vậy hãy đổi tên fk_category_org đến v.d. fk_z_category_org nên làm việc

Điều này không có giấy tờ và có thể thay đổi bất cứ lúc nào (và có thể bị ảnh hưởng bởi các yếu tố khác).

Điều đó đang được nói, cách thích hợp để làm điều này (và bất kỳ điều gì khác quá phức tạp đối với on cascade ) sẽ là thêm một before delete - trình kích hoạt trên organisation -table mà "thủ công" xóa người dùng trước tiên và sau đó là các danh mục sau đó. before delete -trigger được thực thi trước on cascade (vì vậy bạn có thể quyết định xem bạn có muốn giữ những thứ đó hay không, mặc dù nó có thể gây hiểu lầm).

Không hoàn toàn rõ ràng đó có phải là hành vi có chủ đích của bạn hay không, nhưng hiện tại, người dùng có thể có một danh mục thuộc tổ chức 1 trong khi anh ta được chỉ định cho tổ chức 2. Việc xóa tổ chức 1 sau đó vẫn không thành công. Có vẻ như đó là điều bạn muốn ngăn chặn bởi thiết kế của mình, nhưng nếu bạn muốn tính năng xóa cũng hoạt động trong trường hợp này, bạn cần sử dụng trình kích hoạt để có thể kết hợp điều đó (hoặc xóa thủ công trong ứng dụng của bạn), việc xếp tầng sẽ không hoạt động trừ khi bạn cũng phân tầng trong bảng danh mục.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate gửi các truy vấn thừa đến cơ sở dữ liệu

  2. Làm thế nào để lấy dữ liệu từ 2 bảng?

  3. trả về boolean mysql là 'yes' hoặc 'no'

  4. Cách tạo cài đặt MySQL để thử nghiệm cục bộ

  5. MySQL Workbench có được quyền truy cập để quản trị?