Với MySQL – và bất kỳ cơ sở dữ liệu nào khác – bất kỳ lúc nào bạn muốn xây dựng lại lược đồ cơ sở dữ liệu của bạn, điều đầu tiên bạn thường làm là xóa tất cả các bảng cơ sở dữ liệu cũ bằng các câu lệnh DROP TABLE của MySQL, và sau đó xây dựng lại chúng với các câu lệnh như CREATE TABLE. Khi bạn làm điều này, bạn thường sẽ gặp phải các vấn đề khi xóa các bảng cơ sở dữ liệu cũ vì các mối quan hệ khóa ngoài giữa các bảng.

Ví dụ, nếu một bảng Orders có một liên kết khóa ngoài trở lại bảng Customers, bạn không thể xóa bảng Customers cho đến khi bạn xóa bảng Orders trước – và bất kỳ bảng cơ sở dữ liệu nào khác có mối quan hệ khóa ngoài trở lại bảng Customers.

Để giải quyết vấn đề này, MySQL có một biến có tên FOREIGN_KEY_CHECKS mà bạn có thể đặt ngay trước và ngay sau tất cả các câu lệnh SQL DROP TABLE của bạn, và với tập hợp biến này, thứ tự các câu lệnh Drop của bạn không quan trọng. MySQL về cơ bản sẽ tắt kiểm tra khóa ngoài, cho phép bạn Drop các bảng theo bất kỳ thứ tự mong muốn nào. Sau đó, bạn chạy câu lệnh CREATE TABLE của MySQL, sau đó bật lại tính năng foreign_key_check.

Ứng dụng vào ví dụ trên, bạn có thể dễ dàng Drop bảng Customers bằng cách sử dụng chuỗi truy vấn sau:

SET FOREIGN_KEY_CHECKS = 0; 
drop table if exists customers; 
SET FOREIGN_KEY_CHECKS = 1;

Như vậy, chỉ cần đặt biến FOREIGN_KEY_CHECKS của MySQL trước và sau tất cả các câu lệnh Drop của bạn, và các câu lệnh DROP TABLE sẽ hoạt động tốt, bất kể các khóa ngoại.

Chúc các bạn thành công.

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây