Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xóa trigger nếu tồn tại trong MySQL (DROP TRIGGER IF EXISTS)

Để xóa trigger an toàn (không báo lỗi nếu trigger không tồn tại), MySQL cung cấp mệnh đề IF EXISTS.

Cú pháp

DROP TRIGGER [IF EXISTS] ten_trigger;

Ví dụ minh họa

1. Kiểm tra trigger hiện có

mysql> SHOW TRIGGERS;

Kết quả:

+-------------+--------+---------------+------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
| Trigger     | Event  | Table         | Statement                                                              | Timing | Created                | sql_mode                                   | Definer | character_set_client | collation_connection | Database Collation |
+-------------+--------+---------------+------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
| CheckSalary | INSERT | employeetable | if new.EmployeeSalary < 1000 then set new.EmployeeSalary = 10000;end if | BEFORE | 2018-12-31 17:33:29.54 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@%  | utf8                 | utf8_general_ci      | utf8mb4_0900_ai_ci |
+-------------+--------+---------------+------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+

2. Xóa trigger 'CheckSalary' an toàn

mysql> DROP TRIGGER IF EXISTS CheckSalary;
Query OK, 0 rows affected (0.30 sec)

3. Kiểm tra lại

mysql> SHOW TRIGGERS;
Empty set (0.00 sec)

Các trường hợp sử dụng

LệnhHành vi nếu trigger tồn tạiHành vi nếu trigger KHÔNG tồn tại
DROP TRIGGER ten_trigger;Xóa thành côngBáo lỗi: ERROR 1360 (HY000): Trigger does not exist
DROP TRIGGER IF EXISTS ten_trigger;Xóa thành côngThành công (không lỗi), trả về warning

Ứng dụng trong script migration/deployment

Luôn dùng IF EXISTS trong script tự động để tránh thất bại khi chạy lại:

-- Script migration an toàn
DROP TRIGGER IF EXISTS CheckSalary;
CREATE TRIGGER CheckSalary BEFORE INSERT ON employeetable
FOR EACH ROW
BEGIN
    IF NEW.EmployeeSalary < 1000 THEN
        SET NEW.EmployeeSalary = 10000;
    END IF;
END;

Lưu ý

  • Cần quyền TRIGGER trên database
  • Trigger gắn với bảng cụ thể, xóa trigger không ảnh hưởng dữ liệu bảng
  • Xem danh sách trigger: SHOW TRIGGERS; hoặc SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = 'ten_db';
  • MySQL không hỗ trợ DROP TRIGGER IF EXISTS ten_trigger1, ten_trigger2; (mỗi lệnh chỉ xóa 1 trigger)