Xác minh trạng thái FOREIGN_KEY_CHECKS trong MySQL
Biến foreign_key_checks kiểm soát việc MySQL có thực thi ràng buộc khóa ngoại hay không. Giá trị 1 (ON) = bật, 0 (OFF) = tắt.
Cách 1: Sử dụng biến hệ thống @@
mysql> SELECT @@foreign_key_checks;
Kết quả:
+----------------------+ | @@foreign_key_checks | +----------------------+ | 1 | +----------------------+
Cách 2: Sử dụng SHOW VARIABLES
mysql> SHOW VARIABLES LIKE 'foreign%';
Kết quả:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | foreign_key_checks | ON | +--------------------+-------+
Khi nào cần tắt FOREIGN_KEY_CHECKS?
- Import database dump (tránh lỗi thứ tự bảng)
- Truncate bảng có FK tham chiếu
- Bulk load dữ liệu lớn
- Restructure schema
Cách tắt/bật
-- Tắt (session) SET FOREIGN_KEY_CHECKS = 0; -- Bật lại (session) SET FOREIGN_KEY_CHECKS = 1; -- Hoặc dùng biến SET @OLD_FK_CHECKS = @@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS = 0; -- ... thực hiện tác vụ ... SET FOREIGN_KEY_CHECKS = @OLD_FK_CHECKS;
Lưu ý quan trọng
- Mặc định là ON (1) - an toàn cho toàn vẹn dữ liệu
- Tắt chỉ trong session hiện tại, không ảnh hưởng session khác
- Khi tắt, có thể chèn dữ liệu vi phạm FK, nhưng bật lại không tự kiểm tra dữ liệu cũ
- Global variable:
SET GLOBAL foreign_key_checks = 0;(cần quyền SUPER)