1. 程式人生 > >資料庫儲存過程和觸發器概述

資料庫儲存過程和觸發器概述

儲存過程綜述

一、概念

資料庫儲存過程是一種資料庫物件,是為了實現某個特定任務,將一組預編譯的SQL語句以一個儲存單元的形式儲存在伺服器上,供使用者呼叫。儲存過程在第一次執行時進行編譯,然後將編譯好的程式碼儲存在快取記憶體中以便以後呼叫,這樣可以提高程式碼的執行效率。
這裡寫圖片描述

二、儲存過程的優點

與傳統資料查詢方式相比較,儲存過程存在一下優點:

  1. 安全機制:只給使用者訪問儲存過程的許可權,而不授予使用者訪問表和檢視的許可權。
  2. 改良了執行效能:在第一次執行後,會在SQL server的緩衝區中建立查詢樹,以後執行無需編譯。
  3. 減少網路流量:儲存過程存在於伺服器上,呼叫時只需傳遞執行儲存過程的執行命令和返回結果。
  4. 模組化的程式設計:增強了程式碼的可重用性,提高了開發效率。

儲存過程同其他程式語言中的過程相似,有如下特點:

  1. 接受輸入引數並以輸出引數的形式將多個值返回至呼叫過程或批處理。
  2. 包含執行資料庫操作(包括呼叫其它過程)的程式設計語句。
  3. 向呼叫過程或批處理返回狀態值,以表明成功或失敗(以及失敗原因)。

三、儲存過程型別

  1. 系統儲存過程

    系統儲存過程儲存在master資料庫中,並以sp_為字首,主要用來從系統表中獲取資訊,為系統管理員管理SQL Server提供幫助,為使用者檢視資料庫物件提供方便。

  2. 本地儲存過程
    本地儲存過程是使用者根據需要,在自己的普通資料庫中建立的儲存過程。

  3. 臨時儲存過程
    臨時儲存過程通常分為區域性臨時儲存過程和全域性臨時儲存過程。建立區域性臨時儲存過程時,要以“#”作為過程名稱的第一個字元。建立全域性臨時儲存過程時,要以“##”作為過程名稱的前兩個字元。

  4. 遠端儲存過程
    遠端儲存過程是SQL Server 2000的一個傳統功能,是指非本地伺服器上的儲存過程。

  5. 擴充套件儲存過程
    擴充套件儲存過程以xp_為字首,它是關係資料庫引擎的開放式資料服務層的一部分,其可以使使用者在動態連結庫(DLL)檔案所包含的函式中實現邏輯,從而擴充套件了Transact-SQL的功能,並且可以象呼叫Transact-SQL過程那樣從Transact-SQL語句呼叫這些函式。

觸發器綜述

一、概念

觸發器是一種特殊型別的儲存過程,不由使用者直接呼叫,而且可以包含複雜的 SQL語句。它們主要用於強制複雜的業務規則或要求。觸發器還有助於強制引用完整性,以便在新增、更新或刪除表中的行時保留表之間已定義的關係。
其顯著的的特點:

  1. 它與表緊密相連,可以看作表定義的一部分;
  2. 它不能通過名稱被直接呼叫,更不允許帶引數,而是當用戶對錶中的資料進行修改時,自動執行;
  3. 可以用於SQL Server約束、預設值和規則的完整性檢查,實施更為複雜的資料完整性約束。

二、觸發器的優點

  1. 觸發器自動執行:在對錶的資料作了任何修改(比如手工輸入或者應用程式採取的操作)之後立即被啟用。
  2. 觸發器能夠對資料庫中的相關表實現級聯更改
  3. 觸發器可以實現比CHECK約束更為複雜的資料完整性約束
  4. 觸發器可以評估資料修改前後的表狀態,並根據其差異采取對策。
  5. 一個表中可以存在多個同類觸發器(INSERT、UPDATE或DELETE),對於同一個修改語句可以有多個不同的對策以響應。

三、觸發器的種類

按觸發被被啟用的時機可以分為兩種型別
AFTER 觸發器INSTEAD OF觸發器

AFTER觸發器又稱為後觸發器,該類觸發器是在引起觸發器執行的修改語句成功完成之後執行。如果修改語句因錯誤(如違反約束或語法錯誤)而失敗,觸發器將不會執行。此類觸發器只能定義在表上,不能建立在檢視上。可以為每個觸發操作(INSERT、UPDATE或DELETE)建立多個AFTER觸發器。

INSTEAD OF觸發器又稱為替代觸發器,當引起觸發器執行的修改語句停止執行時,該類觸發器代替觸發操作執行。該類觸發器既可在表上定義,也可在檢視上定義。對於每個觸發操作(INSERT、UPDATE和DELETE)只能定義一個INSTEAD OF觸發器

特別介紹一下兩張特殊的臨時表:inserted表deleted表

這兩張表都存在於快取記憶體中。使用者可以使用這兩張臨時表來檢測某些修改操作所產生的效果。例如,可以使用SELECT 語句來檢查INSERT和UPDATE語句執行的插入操作是否成功,觸發器是否被這些語句觸發等。但是不允許使用者直接修改inserted表和deleted表中資料。

deleted表中儲存著被DELETE和UPDATE語句影響的舊資料行。在執行DELETE和UPDATE語句過程中,指定的資料行被使用者從基本表中刪除,然後轉移到了delete表中。一般來說,在基本表中delete表中不會存在有相同的資料行。

inserted表中儲存著被INSERT 和UPDATE語句影響的新的資料行。當用戶執行INSERT 和UPDATE語句時,新的資料行被新增到insert表中,同時這些資料行的備份被複制到inserted臨時表中。

一個典型的UPDATE事務實際上是由兩個操作組成。首先,舊的資料行從基本表中轉移到delete表中,前提是這個過程沒有出錯;緊接著將新的資料行同時插入基本表和insert表。