SQL觸發器總結 - sql server 2012數據庫基礎-觸發器及應用-實驗報告


這是我大三第一學期《數據庫基礎》這門課的實驗報告,總共15個實驗,我挑了幾個比較重要的放在博客上,方便查看和復習,尤其是最近SSM后端開發,希望對大家,以及將來的我有所幫助!


實驗要求

在實驗5數據庫設計的基礎上補充設計觸發器,並基於實驗6插入的數據完成實驗

1.為選課表分別建立插入和更新觸發器,如果當前學生累計不及格門數達到5門則給出警示信息

2.為課程表分別建立插入和更新觸發器來建立約束規則:“專業基礎”課的教師必須為“教授”或“副教授”,如果不滿足約束則拒絕操作,並給出錯誤信息。

3.自行再分別設計2~3個觸發器(在實驗報告中要准確描述功能需求)。

4.設計並執行相關的操作,體會DML觸發器的效果和作用。


全部總結鏈接

SQL基礎   (數據庫、表、數據的增刪改查、視圖相關,以及所有實驗報告源代碼)

游標 (類似C++ 的 指針)

存儲過程(類似 C++ 的自定義函數)

觸發器 (類似 自定義的陷阱,或者說是監聽器,滿足某個條件了執行某個方法)

用戶權限及權限管理 (類似Windows的多用戶管理)

並發控制 (了解多個用戶同時對數據造成錯誤的情況 和 解決方法)

數據恢復(當數據庫數據丟失,相應的解決方法)


實驗過程

第一題:為選課表分別建立插入和更新觸發器,如果當前學生累計不及格門數達到5門則給出警示信息

1.1題目:為選課表分別建立插入和更新觸發器,如果當前學生累計不及格門數達到5門則給出警示信息

1.2運行截圖:

 

圖 1 第一題運行截圖

 

圖 2 運行后,選課表新增4條數據

1.3分析

創建一個觸發器,每次在學生表新插入記錄時,用sum變量獲取該學生掛科的數目,如果滿5門,使用raiserror函數彈出警告。


第二題第一部分 插入:

2.1.1 題目:為課程表分別建立插入觸發器來建立約束規則:“專業基礎”課的教師必須為“教授”或“副教授”,如果不滿足約束則拒絕操作,並給出錯誤信息。

 

2.1.2 運行截圖

 

圖 3 先插入一個新老師,職稱為講師

 

圖 4 在課程表創建觸發器 功能:(非教授負責的專業基礎課,彈警告)

 

圖 5 非專業基礎課沒報錯 專業基礎課出錯

2.1.3 分析

  先定義一個不讓非教授上專業基礎課的觸發器,然后先新增一個講師,然后新增這位講師的任意選修課程,無錯誤,再嘗試新增專業基礎課程,彈出警告。


第二題——第二部分 更新:

2.2.1 題目:為課程表分別建立更新觸發器來建立約束規則:“專業基礎”課的教師必須為“教授”或“副教授”,如果不滿足約束則拒絕操作,並給出錯誤信息。

2.2.2 運行截圖:

 

圖 6 嘗試將講師的課程性質改為 ’專業基礎’ 出錯

 

圖 7  課程改為 ’公共基礎’  修改成功

2.2.3 分析:

  更新同插入,只需把代碼第三行insert改為update即可。


第三題

自定義觸發器1:

3.1.1功能

實現插入學生記錄時,如果生源不為‘浙江’,彈出警告

3.1.2運行截圖

 

圖 8 實現插入學生記錄時,如果生源不為‘浙江’,彈出警告

 

圖 9 插入浙江生源學生 正常插入無報錯

3.1.3 分析

  在學生表中定義一個觸發器,當插入的數據生源列不為’浙江’的時候,彈出警告,先嘗試插入非浙江學生,報錯;后插入一個浙江學生,正常插入。


自定義觸發器2:

3.2.1功能:實現插入院系記錄時,如果院系名稱結尾不為’系’且不為’部’,彈出警告

3.2.2運行截圖

 

圖 10 插入院系記錄時,如果院系名稱結尾不為’系’且不為’部’,彈出警告

 

圖 11 如果插入名稱結尾為‘系’或為‘部’,正常插入

 

3.2.3 分析

在院系表中定義一個觸發器,當插入的數據院系名稱列不為’系’或者’部’結尾的時候,彈出警告,先嘗試插入院系名稱結尾為’院’的數據,報錯;后插入一個院系名稱結尾為’系’的記錄,正常插入。


自定義觸發器3:

3.3.1功能:實現插入學生記錄時,如果狀態不為‘正常’,彈出警告

3.3.2運行截圖

uploading.4e448015.gif轉存失敗重新上傳取消

圖 12 插入學生記錄時,如果狀態不為‘正常’,彈出警告

3.3.3 分析

在學生表中定義一個觸發器,當插入的學生數據 狀態列 不為’正常’的時候,彈出警告,先嘗試插入狀態為留級的記錄,報錯;后插入狀態為正常的記錄,正常插入。


實驗總結

觸發器我的理解就是人為設置一個‘異常陷阱’,當用戶對表中數據進行增刪改時,會激活促發其執行相應的操作,也算是對表中數據的一種約束。

其中rollback transaction語句可以讓警告的時候不執行增刪改語句,如果不加這句警告時還會執行增刪改操作。

基本語法:

create trigger 觸發器名on 表名
for insert/update/delate
as
    declare 變量 數據類型
    if 主鍵 is not null
    begin
        if 警告條件
        begin
            raiserror('需要彈出的警告信息',16,10)
        rollback transaction
        end
    end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM