一、觸發(fā)器概念
觸發(fā)器(trigger):監(jiān)視某種情況,并觸發(fā)某種操作,它是提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲(chǔ)過(guò)程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來(lái)觸發(fā),例如當(dāng)對(duì)一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會(huì)激活它執(zhí)行。
觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。 觸發(fā)器創(chuàng)建語(yǔ)法四要素:
1.監(jiān)視地點(diǎn)(table)
2.監(jiān)視事件(insert/update/delete)
3.觸發(fā)時(shí)間(after/before)
4.觸發(fā)事件(insert/update/delete)
觸發(fā)器基本語(yǔ)法如下所示:
DROP TRIGGER if EXISTS 觸發(fā)器名;
CREATE TRIGGER 觸發(fā)器名 BEFORE INSERT ON 表名
FOR EACH ROW
BEGIN
sql語(yǔ)句
END
其中: trigger_time是觸發(fā)器的觸發(fā)事件,可以為before(在檢查約束前觸發(fā))或after(在檢查約束后觸發(fā));
trigger_event是觸發(fā)器的觸發(fā)事件,包括insert、update和delete,需注意對(duì)同一個(gè)表相同觸發(fā)時(shí)間的相同觸發(fā)事件,只能定義一個(gè)觸發(fā)器;
可以使用old和new來(lái)引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容。
觸發(fā)器SQL語(yǔ)法:
DROP TRIGGER if EXISTS triggle_insert_enroll_students;
CREATE TRIGGER triggle_insert_enroll_students AFTER INSERT ON t_course_enroll_students
FOR EACH ROW BEGIN
-- update t_course_enroll_students set pid=(select id from t_course_enroll where t_course_enroll.course_name=t_course_enroll_students.course_name) where id=t_course_enroll_students.id;
set new.pid=(select id from t_course_enroll where t_course_enroll.course_name=new.course_name);
END