SQL觸發(fā)器定義與使用
比如:現(xiàn)需要向?qū)W生表中插入新的學(xué)生數(shù)據(jù)。但在插入學(xué)生數(shù)據(jù)的時,需要同時檢查老師表里的數(shù)據(jù)。如果插入學(xué)生的老師不在老師表里,則先向老師表中插入一條老師數(shù)據(jù),再向?qū)W生表中插入學(xué)生數(shù)據(jù)。
CALL sp_add_student( 'S20170091', '楊艷', '女', '2003-04-09', 15, 'G0206', 89.23, 'T0021' );
如果有多個學(xué)生的數(shù)據(jù)需要插入,則需要多次調(diào)用該存儲過程;可否不開發(fā)存儲過程,在向student表插入(INSERT)數(shù)據(jù)前,后臺自動判斷并插入老師數(shù)據(jù)?
觸發(fā)器簡介
觸發(fā)器:一種與表操作有關(guān)的數(shù)據(jù)庫對象,當觸發(fā)器所在表上出現(xiàn)指定事件(新增、修改、刪除數(shù)據(jù))時,將調(diào)用該對象,即表的操作事件觸發(fā)表上的觸發(fā)器的執(zhí)行。
觸發(fā)器的創(chuàng)建及調(diào)用
比如:現(xiàn)需要向?qū)W生表中插入新的學(xué)生數(shù)據(jù)。但在插入學(xué)生數(shù)據(jù)的時,需要同時檢查老師表里的數(shù)據(jù)。如果插入學(xué)生的老師不在老師表里,則先向老師表中插入一條老師數(shù)據(jù),再向?qū)W生表中插入學(xué)生數(shù)據(jù)。
觸發(fā)器的創(chuàng)建:使用關(guān)鍵字CREATE TRIGGER
CREATE TRIGGER tri_add_student BEFORE INSERT ON student FOR EACH ROW BEGIN IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = new.teacher_id) THEN INSERT INTO teacher(teacher_id) VALUES (new.teacher_id); END IF; END;
INSERT INTO student VALUES( 'S20170092', '李文', '女', '2002-11-19', 16, 'G0206', 55.32, 'T0022' );
觸發(fā)器的分類及執(zhí)行順序
按事件類型分:
- INSERT觸發(fā)器;
- UPDATE觸發(fā)器;
- DELETE觸發(fā)器;
按執(zhí)行先后分:
- BEFORE觸發(fā)器;
- AFTER觸發(fā)器;
NEW與OLD:
- 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ù);
觸發(fā)器執(zhí)行時的異常情況:
- 如果 BEFORE 觸發(fā)器執(zhí)行失敗,SQL 無法正確執(zhí)行;
- SQL 執(zhí)行失敗時,AFTER 型觸發(fā)器不會觸發(fā);
- AFTER 類型的觸發(fā)器執(zhí)行失敗,SQL 會回滾;
觸發(fā)器的刪除
觸發(fā)器的刪除:使用關(guān)鍵字DROP TRIGGER
如:DROP TRIGGER tri_add_student;
觸發(fā)器的優(yōu)缺點
優(yōu)點:
- 自動觸發(fā),無需調(diào)用;
- 提供了一種檢查、保證數(shù)據(jù)完整性的方法;
- 與存儲過程一樣,增強SQL語言的功能和靈活性;
缺點:
- 開發(fā)調(diào)試困難;
- 可移植性差;
到此這篇關(guān)于SQL觸發(fā)器定義與使用的文章就介紹到這了,更多相關(guān)SQL觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
避坑:Sql中?in?和not?in中有null值的情況說明
這篇文章主要介紹了避坑:Sql中?in?和not?in中有null值的情況說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
解析Mysql備份與恢復(fù)簡單總結(jié)與tee命令的使用介紹
本篇文章是對Mysql備份與恢復(fù)簡單總結(jié)與tee命令的使用進行了詳細的分析介紹,需要的朋友參考下2013-06-06
關(guān)于MySQL Memory存儲引擎的相關(guān)知識
這篇文章主要介紹了關(guān)于MySQL Memory存儲引擎的相關(guān)知識,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-11-11

