1. 程式人生 > 其它 >MySQL觸發器的建立和使用

MySQL觸發器的建立和使用

技術標籤:資料庫mysql觸發器

① 在學生表Student中定義一個觸發器 tri1,保證新新增的學生的年齡(Sage)在16~25歲之間。

DROP TRIGGER if EXISTS tri1;  #避免重複出現tri1
delimiter ;;	#開始
CREATE TRIGGER tri1 BEFORE INSERT ON student FOR EACH ROW
BEGIN
	IF(new.Sage > 25) OR (new.Sage > 16)
THEN
	SIGNAL SQLSTATE 'HYOOO' SET message_text = '輸入的年齡要在16~25之間'
; END IF; END;; delimiter; #結束 #呼叫觸發器 insert into Student values('200231001', '王濤', '男', 30, 'IS')


檢視觸發器:
囈語程式緣

呼叫結果:
囈語程式緣


② 在成績表SC中定義一個觸發器tri2,當修改一個記錄時,確保此記錄的成績(Grade)在0~100分之間。

DROP TRIGGER if EXISTS tri2;  #避免重複出現tri2
delimiter ;;	#開始
CREATE TRIGGER tri2 AFTER UPDATE ON sc FOR EACH ROW
BEGIN
	IF(new.grade >
100) OR (new.grade < 0) THEN SIGNAL SQLSTATE 'HYOOO' SET message_text = '成績應在0~100分之間'; END IF; END;; delimiter; #結束 #呼叫觸發器 update SC set Grade=120 where Sno='200215122'


檢視觸發器:
囈語程式緣

呼叫結果:
囈語程式緣


③ 在學生表Student中建立一個觸發器tri3,當刪除學生表Student中學生時,自動刪除成績表SC中相應學生的選課記錄。

DROP TRIGGER if EXISTS tri3;  #避免重複出現tri3
delimiter
;; #開始 CREATE TRIGGER tri3 AFTER DELETE ON student FOR EACH ROW BEGIN DELETE FROM sc WHERE sno = old.sno; END;; delimiter; #結束 #呼叫觸發器 delete from Student where Sno = '200215122'


檢視觸發器:
囈語程式緣

呼叫結果:
囈語程式緣
囈語程式緣
注:刪除之後 Student表 和 SC表都沒有 ‘200215122’