日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mySQL教程 第9章 触发器

發布時間:2025/3/20 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mySQL教程 第9章 触发器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第9章 觸發器

入的新數據放到new表,刪除的數據放到old表。

準備本章學習環境

連接數據庫schoolDB,刪除表TStudent,TScore和Tsubject中的所有數據。

delete from TStudent;

delete from TScore;

delete from TSubject;

向學生表插入兩條記錄

insert TStudent (StudentID,Sname,sex,Class)

values ('00001','張作霖','男','JAVA'),

('00002','湯二虎','男','NET')

向課程表插入3條記錄

insert into TSubject values

('0001','計算機網絡','奠基計算機網絡','清華出版社'),

('0002','數據結構','大話數據結構','人郵出版社'),

('0003','JAVA開發','JAVA企業級開發','人郵出版社')

創建插入觸發器

1. 練習:創建插入觸發器

查看表TStudent中的記錄,你發現沒有錄入時間enterTime,也沒有郵箱Email。

select * from TStudent

下面創建觸發器,在TStudent表中插入記錄時,使用觸發器插入錄入時間即enterTime和郵箱即Email。

創建觸發器

CREATE TRIGGER autoTimeAndEmail

BEFORE INSERT on `TStudent`

FOR EACH ROW

BEGIN

SET NEW.enterTime=NOW();

SET NEW.Email=concat(PINYIN(NEW.sname),'@hotmail.com');

END

插入兩條記錄測試觸發器是否工作。

insert TStudent (StudentID,Sname,sex,Class)

values ('00003','張左相','男','JAVA'),

('00004','張四非','男','NET')

查看新插入的記錄,發現已經由觸發器插入了用戶郵箱和錄入時間

select * from TStudent

2. 練習:使用觸發器實現數據插入跟蹤

使用觸發器實現對TStudent表數據插入的跟蹤,將跟蹤事件記錄到一張審計表中review。

一張表不能同時有多個插入觸發器

Drop TRIGGER autoTimeAndEmail

創建記錄跟蹤的審計表

create table review

(

username varchar(20),

act VARCHAR(10),

studentID varchar(10),

sname VARCHAR(10),

actTime TIMESTAMP

)

創建觸發器,該觸發器向insertReview表中記錄

CREATE TRIGGER insertReview BEFORE INSERT on `TStudent`

FOR EACH ROW

BEGIN

insert review values (user(),'insert',NEW.studentID,NEW.sname,NOW());

END

在Tstudent表插入一條記錄

INSERT `TStudent` (studentid,sname,sex,class) VALUES ('00005','王嚴明','男','NET')

查看review表是否記錄了

select * from review

可以看到已經記錄下那個用戶什么時間插入了一條記錄

3. 練習:創建update觸發器

在TStudent表上創建觸發器,在review表中記錄更改學生的學號和更改前的姓名。

CREATE TRIGGER updateReview BEFORE UPDATE on `TStudent`

FOR EACH ROW

BEGIN

insert review values (user(),'update',NEW.studentID,old.sname,NOW());

END

查看學號是00005的學生姓名

select * from `TStudent` where studentID='00005'

UPDATE `TStudent` SET sname='馮國彰' where studentID='00005'

查看是否記錄

select * from `review`

4. 練習:創建刪除觸發器

該觸發器能夠記錄TStudent表的刪除事件到review表

CREATE TRIGGER deleteReview BEFORE DELETE on `TStudent`

FOR EACH ROW

BEGIN

insert review values (user(),'delete',old.studentID,old.sname,NOW());

END

刪除二條記錄

delete from `TStudent` where studentID='00002'

select * from review

5. 練習:在觸發器中使用異常回滾操作

MySQL的觸發器中不支持rollback和 commit,也就是說如果出現異常,沒有辦法回滾。解決辦法是,如果打算回滾更改,人為產生異常。

創建觸發器,限定TStudent表sex列只能輸入‘男’或‘女’。如果是其他值,取消插入操作。

注意紅色部分是故意產生的錯誤,因為沒有定義E001,這樣會自動取消插入。

CREATE TRIGGER limitSex BEFORE INSERT on `TStudent`

FOR EACH ROW

BEGIN

declare M_ERRMSG varchar(10);

if NEW.sex='男' or NEW.sex='女' then

set M_ERRMSG='插入成功';

else select E001 INTO M_ERRMSG;

end if;

END

插入記錄,其中一條性別是錯誤的

insert TStudent (StudentID,Sname,sex,Class)

values ('00005','馮國章','男','JAVA'),

('00006','牛萬鵬','南','NET')

可以看到插入失敗

查看是否插入了兩條,可以看到一條也沒插入成功。

直插入一條正確的

insert TStudent (StudentID,Sname,sex,Class) values ('00005','馮國章','男','JAVA')

可以看到插入成功

6. 練習:查看創建的觸發器

雙擊表,在Triggers標簽下,可以看到表上的觸發器

在以下圖中也可以看到創建的觸發器

7. 練習:查看觸發器的定義

8. 練習:使用SHOW TRIGGERS顯示觸發器;

SHOW TRIGGERS;

9. 練習:查看所有數據定義的觸發器

連接到Information_schema數據庫,輸入以下命令查看所有觸發器

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS

10. 練習:刪除觸發器

刪除觸發器,觸發器名字區分大小寫。

drop trigger limitSex

思考題

1. 在Tstudent表上創建觸發器在8點到9點之間才能進行update操作,其他時間段不允許進行更改。

廣告

轉載于:https://blog.51cto.com/91xueit/1137982

總結

以上是生活随笔為你收集整理的mySQL教程 第9章 触发器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。