00201 數據庫基礎:函數、觸發器TRIGGER和存儲過程PROCEDURE

/本博文語法基於SQL SERVER 2008

自建函數FUNCTION

用戶自己寫的一些SQL代碼的組合,從而實現特定的功能
創建函數的語法:

CREATE FUNCTION function_name
    (arg1 type1, arg2 type2, arg2 type3)    
    RETURNS ...

大多數情況下,運行函數會返回一個表,該表可以作爲select語句的from子句的對象來進行查詢,或者嵌套在where語句之中,從而實現邏輯比較複雜的查詢。

存儲過程PROCEDURE

涵義:類似於模塊的概念,是打包好的代碼,用於實現固定的功能,可以通過引用封裝好的存儲過程來提高開發的效率

這裏寫圖片描述

創建存儲過程

CREATE RROCEDURE procedure_name
      AS sql_statements

引用:只要給出參數就能調用封裝在存儲過程裏的語句

CALL procedure_name (arg1, arg2...)

意義:通過封裝存儲過程,可以大大提高數據庫的易用性,尤其是對於不會寫SQL代碼的人來講,只要在可視化界面輸入參數,就會自動調用存儲過程得出結果。

觸發器TRIGGER

涵義:對特定表執行特定操作時自動觸發——用於強制執行某些規則,保證數據庫裏的數據安全(比CHECK約束更嚴格)。比如說有一些關鍵數據,絕對不允許隨便改動,就可以弄一個觸發器,只要對這些數據執行insert/update/delete,就馬上執行回退操作,撤銷該操作。

語法:

CREATE TRIGGER trigger_name 
    ON table_name/view_name 
    FOR/AFTER/INSTEAD OF INSERT/UPDATE/DELETE 
    AS sql_statement
/after: 在指定操作之後觸發
/for:默認操作,默認after,用它跟用after沒區別
/instead of:不執行該操作而是執行觸發器本身

trigger的操作

  • 刪除:DROP TRIGGER trigger_name
  • 查看已有觸發器:
SELECT * FROM sysobjects WHERE xtype='TR'
  • 修改:
ALTER TRIGGER trigger_name
    ON table_name/view_name
    FOR/AFTER/INSTEAD OF INSERT/DELETE/UPDATE
    AS sql_statement 
  • 禁用
ALTER TABLE table_name
DISABLE TRIGGER trigger_name/ALL
GO
/ALL 禁用所有

引用的兩個特殊表:
inserted:剛剛插入的對象,保存insert和update操作導致的更新的行的複本
deleted:剛剛刪除的對象,保存delete和update操作導致的被刪除的原來的行的複本

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