Để đối phó với yêu cầu @Zxaos, vì chúng ta không thể có VÀ/HOẶC nhà khai thác cho MySQL gây nên, bắt đầu với bạn mã, dưới đây là một ví dụ hoàn chỉnh để đạt được như vậy.
1. Xác định kích hoạt INSERT:
DELIMITER //
DROP TRIGGER IF EXISTS my_insert_trigger//
CREATE [email protected] TRIGGER my_insert_trigger
AFTER INSERT ON `table`
FOR EACH ROW
BEGIN
-- Call the common procedure ran if there is an INSERT or UPDATE on `table`
-- NEW.id is an example parameter passed to the procedure but is not required
-- if you do not need to pass anything to your procedure.
CALL procedure_to_run_processes_due_to_changes_on_table(NEW.id);
END//
DELIMITER ;
2. Xác định kích hoạt CẬP NHẬT
DELIMITER //
DROP TRIGGER IF EXISTS my_update_trigger//
CREATE [email protected] TRIGGER my_update_trigger
AFTER UPDATE ON `table`
FOR EACH ROW
BEGIN
-- Call the common procedure ran if there is an INSERT or UPDATE on `table`
CALL procedure_to_run_processes_due_to_changes_on_table(NEW.id);
END//
DELIMITER ;
3. Xác định THỦ TỤC chung được sử dụng bởi cả hai gây nên:
DELIMITER //
DROP PROCEDURE IF EXISTS procedure_to_run_processes_due_to_changes_on_table//
CREATE [email protected] PROCEDURE procedure_to_run_processes_due_to_changes_on_table(IN table_row_id VARCHAR(255))
READS SQL DATA
BEGIN
-- Write your MySQL code to perform when a `table` row is inserted or updated here
END//
DELIMITER ;
Bạn lưu ý rằng tôi cẩn thận khôi phục dấu phân cách khi hoàn thành công việc kinh doanh xác định trình kích hoạt và thủ tục.
Nguồn
2014-08-30 18:38:03
đó là một ý tưởng hay. Đã không nghĩ đến việc sử dụng một thủ tục là tốt. –
Bạn có thể đưa ra ví dụ về đồ chơi này cho những người không quen thuộc với cú pháp này không? – Zxaos
@Zxaos: Tôi khuyên bạn nên bắt đầu bằng http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html (bao gồm một số ví dụ) và hỏi (các) câu hỏi của riêng bạn nếu cần. – derobert