sql server
mySQL
create trigger 觸發(fā)器名稱
{ before | after } [ insert | update | delete ] on 表名
for each row
觸發(fā)器執(zhí)行的語句塊
## 表名: 表示觸發(fā)器監(jiān)控的對象
## before | after : 表示觸發(fā)的時間,before : 表示在事件之前觸發(fā); after:表示在事件之后觸發(fā)
## insert | update | delete :表示觸發(fā)的事件
Insert: 表示插入記錄時觸發(fā)
update: 表示更新記錄時觸發(fā)
delete:表示刪除記錄時觸發(fā)
## 觸發(fā)器執(zhí)行語句塊: 可以是單條sql語句,也可以有 begin 。。。。end 結構組成的復合語句塊,注意要加 delimiter $ .....delimiter ;
NEW與OLD詳解
MySQL 中定義了 NEW 和 OLD,用來表示觸發(fā)器的所在表中,觸發(fā)了觸發(fā)器的那一行數(shù)據(jù),來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,具體地:
在INSERT型觸發(fā)器中,NEW用來表示將要(BEFORE)或已經(jīng)(AFTER)插入的新數(shù)據(jù);
在UPDATE型觸發(fā)器中,OLD用來表示將要或已經(jīng)被修改的原數(shù)據(jù),NEW用來表示將要或已經(jīng)修改為的新數(shù)據(jù);
在DELETE型觸發(fā)器中,OLD用來表示將要或已經(jīng)被刪除的原數(shù)據(jù);
使用方法:
NEW.columnname:新增行的某列數(shù)據(jù)(columnName為相應數(shù)據(jù)表某一列名)
OLD.columnname:刪除行的某列數(shù)據(jù)(columnName為相應數(shù)據(jù)表某一列名)
另外,OLD是只讀的,而NEW則可以在觸發(fā)器中使用 SET 賦值,這樣不會再次觸發(fā)觸發(fā)器,造成循環(huán)調用
sql server Insertded 等價 Mysql NEW deleted表 等價 OLD 表
查看觸發(fā)器
1、SHOW TRIGGERS語句查看觸發(fā)器信息
#查詢所有觸發(fā)器
SHOW TRIGGERS查看指定觸發(fā)器定義
show create trigger 觸發(fā)器名稱
結果,顯示所有觸發(fā)器的基本信息;無法查詢指定的觸發(fā)器
2、在information_schema.triggers表中查看指定觸發(fā)器信息
#查詢指定觸發(fā)器
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME=‘trig1’;
結果,顯示所有觸發(fā)器的詳細信息;同時,該方法可以查詢制定觸發(fā)器的詳細信息。
Tips:所有觸發(fā)器信息都存儲在information_schema數(shù)據(jù)庫下的triggers表中,可以使用SELECT語句查詢,如果觸發(fā)器信息過多,最好通過TRIGGER_NAME字段指定查詢。
刪除觸發(fā)器
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
#刪除指定觸發(fā)器
drop trigger trig1;
總結
觸發(fā)器是基于行觸發(fā)的,所以刪除、新增或者修改操作可能都會激活觸發(fā)器,所以不要編寫過于復雜的觸發(fā)器,也不要增加過多的觸發(fā)器,這樣會對數(shù)據(jù)的插入、修改或者刪除帶來比較嚴重的影響,同時也會帶來可移植性差的后果,所以在設計觸發(fā)器的時候一定要有所考慮。
觸發(fā)器是一種特殊的存儲過程,它在插入,刪除或修改特定表中的數(shù)據(jù)時觸發(fā)執(zhí)行,它比數(shù)據(jù)庫本身標準的功能有更精細和更復雜的數(shù)據(jù)控制能力。
文章來源:http://www.zghlxwxcb.cn/news/detail-664358.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-664358.html
到了這里,關于mysql 、sql server trigger 觸發(fā)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!