MySQL觸發器的建立和使用
阿新 • • 發佈:2021-01-10
① 在學生表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’