1. 程式人生 > >00201 資料庫基礎:函式、觸發器TRIGGER和儲存過程PROCEDURE

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操作導致的被刪除的原來的行的複本