觸發(fā)器是 mysql 中用于在特定的數(shù)據(jù)修改事件(插入、更新、刪除)發(fā)生時(shí)自動(dòng)執(zhí)行指定操作的數(shù)據(jù)庫(kù)對(duì)象。觸發(fā)器的用途包括:數(shù)據(jù)完整性:確保數(shù)據(jù)的準(zhǔn)確性和一致性。業(yè)務(wù)規(guī)則:實(shí)施業(yè)務(wù)邏輯,如計(jì)算派生列或創(chuàng)建關(guān)聯(lián)數(shù)據(jù)。數(shù)據(jù)審計(jì):記錄表中數(shù)據(jù)的更改,以便審計(jì)和跟蹤。自動(dòng)化任務(wù):自動(dòng)化重復(fù)性操作,如發(fā)送通知或更新緩存。
MySQL 觸發(fā)器的用途
簡(jiǎn)介
觸發(fā)器是 MySQL 中一種數(shù)據(jù)庫(kù)對(duì)象,用于在特定的事件發(fā)生時(shí)自動(dòng)執(zhí)行指定的操作。事件可能是表中的數(shù)據(jù)被插入、更新或刪除。
使用觸發(fā)器的好處
數(shù)據(jù)完整性:觸發(fā)器可用于執(zhí)行數(shù)據(jù)驗(yàn)證,確保數(shù)據(jù)的準(zhǔn)確性和一致性。
業(yè)務(wù)規(guī)則:觸發(fā)器可用于實(shí)施業(yè)務(wù)邏輯,例如計(jì)算派生列或自動(dòng)創(chuàng)建關(guān)聯(lián)數(shù)據(jù)。
數(shù)據(jù)審計(jì):觸發(fā)器可用于記錄對(duì)表所做的更改,以便進(jìn)行審計(jì)和跟蹤。
自動(dòng)化任務(wù):觸發(fā)器可用于自動(dòng)化重復(fù)性任務(wù),例如在插入新行時(shí)發(fā)送通知或更新緩存。
觸發(fā)器的類型
BEFORE 觸發(fā)器:在事件發(fā)生之前執(zhí)行。
AFTER 觸發(fā)器:在事件發(fā)生之后執(zhí)行。
INSTEAD OF 觸發(fā)器:代替事件執(zhí)行操作。
創(chuàng)建觸發(fā)器
使用 CREATE TRIGGER 語(yǔ)句創(chuàng)建觸發(fā)器。該語(yǔ)句需要指定觸發(fā)器的以下信息:
名稱
事件(INSERT、UPDATE、DELETE)
表
執(zhí)行的操作(SQL 語(yǔ)句)
示例
以下觸發(fā)器在向表 “customers” 中插入新行時(shí)向另一個(gè)表 “sales” 中插入一條銷售記錄:
CREATE TRIGGER insert_sale AFTER INSERT ON customers FOR EACH ROW INSERT INTO sales (customer_id, product_id, quantity) VALUES (NEW.customer_id, NEW.product_id, NEW.quantity);
登錄后復(fù)制
注意事項(xiàng)
觸發(fā)器可能會(huì)導(dǎo)致性能問(wèn)題,因?yàn)樗鼈儠?huì)增加數(shù)據(jù)庫(kù)操作的復(fù)雜性。
在觸發(fā)器中執(zhí)行的語(yǔ)句必須是確定性的,即它們不能產(chǎn)生隨機(jī)結(jié)果或修改數(shù)據(jù)。
避免在觸發(fā)器中使用遞歸調(diào)用,因?yàn)樗赡軙?huì)導(dǎo)致無(wú)限循環(huán)。






