MySQL Safe Mode (SQL_SAFE_UPDATES=1) chặn câu lệnh DELETE/UPDATE không có WHERE sử dụng khóa chính (PRIMARY KEY). Để tắt tạm thời:
Cú pháp
-- Tắt safe mode SET SQL_SAFE_UPDATES = 0; -- Thực hiện DELETE/UPDATE DELETE FROM table_name WHERE condition; -- Bật lại safe mode (khuyến nghị) SET SQL_SAFE_UPDATES = 1;
Ví dụ minh họa
mysql> CREATE TABLE SafeDeleteDemo (Price INT); Query OK, 0 rows affected (0.50 sec) mysql> INSERT INTO SafeDeleteDemo VALUES (100),(200),(300),(500),(1000),(150); Query OK, 6 rows affected
Dữ liệu ban đầu:
+-------+ | Price | +-------+ | 100 | | 200 | | 300 | | 500 | | 1000 | | 150 | +-------+
Tắt safe mode và xóa giá trị >= 500:
mysql> SET SQL_SAFE_UPDATES = 0; Query OK, 0 rows affected (0.00 sec) mysql> DELETE FROM SafeDeleteDemo WHERE Price >= 500; Query OK, 2 rows affected (0.14 sec)
Kết quả:
+-------+ | Price | +-------+ | 100 | | 200 | | 300 | | 150 | +-------+
Lưu ý quan trọng
SQL_SAFE_UPDATESlà biến session, chỉ ảnh hưởng đến kết nối hiện tại.- Luôn bật lại
SET SQL_SAFE_UPDATES = 1sau khi xong. - Cách an toàn hơn: thêm điều kiện khóa chính vào WHERE:
WHERE id > 0 AND Price >= 500. - Xem trạng thái:
SHOW VARIABLES LIKE 'sql_safe_updates'.
Cấu hình vĩnh viễn
Thêm vào file cấu hình my.cnf/my.ini:
[mysqld] sql_safe_updates=0
Khuyến nghị: giữ bật (1) cho an toàn, chỉ tắt khi cần thiết trong session.