MySQL中的觸發器是一種特殊的數據庫對象,它可以在指定的事件發生時,自動執行預定義的動作。這種動作可以是SQL語句、存儲過程、函數等。使用觸發器可以在不影響數據庫表結構的情況下,實現諸如自動計算、自動更新等功能。
創建觸發器需要使用CREATE TRIGGER語句,語法如下:
CREATE TRIGGER trigger_name {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name FOR EACH ROW trigger_body
其中,trigger_name是觸發器的名稱,可以自定義。BEFORE和AFTER是時機,指定觸發器執行的時間。INSERT、UPDATE、DELETE是觸發器的事件,指定觸發器執行的時機。table_name是觸發器所針對的表的名稱,FOR EACH ROW表示針對每一行記錄執行觸發器。trigger_body則是觸發器的具體動作。
例如,以下代碼為在每次向orders表插入新記錄時,根據order_items表中的商品數量和單價,自動計算訂單總金額的觸發器:
CREATE TRIGGER calc_order_amount AFTER INSERT ON orders FOR EACH ROW BEGIN UPDATE orders SET total_amount = (SELECT SUM(quantity * price) FROM order_items WHERE order_id = NEW.id) WHERE id = NEW.id; END
這個觸發器的時機是AFTER INSERT,即在插入新記錄之后執行。觸發器的事件是INSERT,即在向orders表中插入新記錄時執行。針對的表是orders,觸發的動作是更新total_amount字段的值。這里使用了NEW.id來獲得新增記錄的id,從而關聯order_items表中對應的商品數量和單價計算訂單總金額。
MySQL中的觸發器功能非常強大,可以用于實現自動計算、自動更新、數據驗證等功能。不過,使用觸發器要謹慎,因為觸發器會帶來額外的性能損耗,容易影響數據庫的執行效率。