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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章