Có thể sửa đổi một định nghĩa kích hoạt hiện có trong MySQL?


14

Tôi tự hỏi nếu có thể cập nhật một định nghĩa kích hoạt trong MySQL. Ví dụ, tôi có một trình kích hoạt T và tôi muốn thêm một số chức năng mới cho nó.

Giả định của tôi là tôi cần bỏ và tạo lại nó.

Các thực tiễn tốt nhất trong quản trị cơ sở dữ liệu cho các kịch bản như vậy là gì?


Alex, bạn đã xem tài liệu MySQL về định nghĩa kích hoạt chưa? Nó đã nói gì; phần nào bạn không chắc chắn hoặc đang gây ra sự cố cho bạn khi bạn cố gắng thực hiện chúng?
Michael Green

Tôi không tìm thấy bất kỳ thông tin nào trong tài liệu MySQL nếu có thể cập nhật trình kích hoạt hay không. Tôi cho rằng điều đó là không thể và tôi muốn kiểm tra lại.
Alex

Câu trả lời:


19

Có vẻ như bạn đang hỏi liệu có thể thay đổi trình kích hoạt trong hoạt động nguyên tử hay không, nếu định nghĩa mới không thành công, bạn sẽ không mất định nghĩa cũ ... tương tự CREATE OR REPLACE VIEW, thay thế định nghĩa chế độ xem nếu định nghĩa mới là hợp lệ, nhưng để lại cái cũ, nếu bạn không thể thay thế nó.

Thật không may, không có ALTER TRIGGERhoặc CREATE OR REPLACE TRIGGERtrong MySQL.

Tôi sẽ đề nghị rằng cách tốt nhất là khóa bảng nơi kích hoạt, vì vậy không có hàng nào bị ảnh hưởng khi không có cò. Thả và thêm các kích hoạt trong khi một bảng bị khóa được cho phép.

mysql> LOCK TABLES t1 WRITE; -- the next prompt appears once you've obtained the lock
mysql> DROP TRIGGER t1_bi; 
mysql> DELIMITER $$
mysql> CREATE TRIGGER ti_bi BEFORE INSERT ON t1 FOR EACH ROW 
       BEGIN
       ...
       END $$
mysql> DELIMITER ;
mysql> UNLOCK TABLES;

Cập nhật: MariaDB, trong phiên bản 10.1.4, đã thêm hỗ trợ CREATE OR REPLACE TRIGGERcho thay thế thả xuống của họ cho MySQL.

https://mariadb.com/kb/en/mariadb/create-trigger/

MySQL của Oracle tính đến ngày 5.7 vẫn dựa vào giải pháp trên.


2
"MySQL của Oracle vào ngày 5.7 vẫn dựa vào giải pháp trên" - vẫn là trường hợp trong phiên bản 8.0
Paul Campbell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.