TRUNCATE TABLE an toàn khi có khóa ngoại (Foreign Key)
Khi các bảng liên quan bằng khóa ngoại, TRUNCATE sẽ báo lỗi. Giải pháp: tạm thời tắt kiểm tra khóa ngoại, truncate, rồi bật lại.
Cú pháp an toàn
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE bang1;
TRUNCATE TABLE bang2;
...
TRUNCATE TABLE bangN;
SET FOREIGN_KEY_CHECKS = 1;
Ví dụ thực tế
mysql> SET FOREIGN_KEY_CHECKS = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> TRUNCATE TABLE skiplasttenrecords;
Query OK, 0 rows affected (0.97 sec)
mysql> TRUNCATE TABLE searchtextdemo;
Query OK, 0 rows affected (0.89 sec)
mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)
Kiểm tra:
mysql> SELECT * FROM searchtextdemo;
Empty set (0.00 sec)
mysql> SELECT * FROM skiplasttenrecords;
Empty set (0.00 sec)
⚠️ Lưu ý quan trọng
- Chỉ dùng trong môi trường dev/test hoặc khi chắc chắn dữ liệu có thể xóa toàn bộ.
- Trong production, hãy cân nhắc
DELETEcó điều kiện hoặc backup trước. TRUNCATEreset AUTO_INCREMENT, không kích hoạt trigger, không ghi binlog từng dòng (nhanh hơn DELETE).- Luôn bật lại
FOREIGN_KEY_CHECKS = 1ngay sau khi xong.
Tham khảo thêm: DELETE FROM bang WHERE dieu_kien nếu chỉ cần xóa một phần dữ liệu.