00201 資料庫基礎:函式、觸發器TRIGGER和儲存過程PROCEDURE
阿新 • • 發佈:2019-02-06
/本博文語法基於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操作導致的被刪除的原來的行的複本