在MySQL中,觸發(fā)器是一種能夠在表上進(jìn)行自動(dòng)化操作的工具。使用MySQL內(nèi)置的觸發(fā)器功能,您可以在表中插入、更新、刪除記錄時(shí)自動(dòng)執(zhí)行SQL語(yǔ)句。下面我們來學(xué)習(xí)一下如何在MySQL中創(chuàng)建觸發(fā)器。
先看一下觸發(fā)器的基本語(yǔ)法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN -- 觸發(fā)器代碼 END;
各個(gè)參數(shù)的含義:
trigger_name
:觸發(fā)器名稱,必須唯一。trigger_time
:觸發(fā)器觸發(fā)時(shí)間,取值BEFORE
或AFTER
。trigger_event
:觸發(fā)器觸發(fā)事件,取值INSERT
、UPDATE
或DELETE
。table_name
:要操作的表名。FOR EACH ROW
:當(dāng)該參數(shù)存在時(shí),表示該觸發(fā)器針對(duì)每一行記錄都會(huì)觸發(fā)。BEGIN
和END
:觸發(fā)器要執(zhí)行的SQL代碼都在 BEGIN 和 END 之間。
下面以一個(gè)簡(jiǎn)單的例子說明創(chuàng)建觸發(fā)器的過程。假設(shè)我們有一個(gè)學(xué)生表students
,其中有一個(gè)列叫做score
。我們想在學(xué)生的成績(jī)更新時(shí)自動(dòng)將成績(jī)超過80分的學(xué)生的狀態(tài)更新為“優(yōu)秀”。
CREATE TRIGGER trig_upd_students_score AFTER UPDATE ON students FOR EACH ROW BEGIN IF NEW.score >80 THEN UPDATE students SET status='優(yōu)秀' WHERE id=NEW.id; END IF; END;
上面的代碼中,我們創(chuàng)建了一個(gè)叫做trig_upd_students_score
的觸發(fā)器,它會(huì)在學(xué)生表students
的score
列更新后觸發(fā)。
在觸發(fā)器代碼中,我們使用了IF
語(yǔ)句來判斷學(xué)生的成績(jī)是否超過了80分。如果是,則使用UPDATE
語(yǔ)句將該學(xué)生的狀態(tài)更新為“優(yōu)秀”。
上面的例子只是一個(gè)簡(jiǎn)單的示例,實(shí)際上觸發(fā)器能夠?qū)崿F(xiàn)的功能非常強(qiáng)大。例如,您還可以使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)同步、數(shù)據(jù)歸檔、審計(jì)等功能。