數據庫的一些基本概念(視圖,存儲過程,函數,觸發器)


一、視圖

視圖定義

視圖是從一個或幾個基本表(或視圖)中導出的虛擬的可視化的表。在系統的數據字典中僅存放了視圖的定義,不存放視圖對應的數據。

視圖特點

  • 安全:有的數據是需要保密的,如果直接把表給出來進行操作會造成泄密,那么可以通過創建視圖把相應視圖的權限給出來即可保證數據的安全。
  • 高效:復雜的連接查詢,每次執行時效率比較低,可以考慮新建視圖,每次從視圖中獲取,將會提高效率。
  • 定制數據:將常用的字段放置在視圖中。
  • 使用視圖不會加快數據查詢速度。

 

二、存儲過程

存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集,存儲在數據庫中,經過第一次編譯后調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象。

優點

  • 存儲過程的能力大大增強了SQL語言的功能和靈活性。
  • 可保證數據的安全性和完整性。
  • 通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而保證數據的安全。
  • 存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。
  • 在運行存儲過程前,數據庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。
  • 可以降低網絡的通信量。
  • 使體現企業規則的運算程序放入數據庫服務器中,以便 集中控制。

 

三、函數

在數據庫中都有函數,這些函數屬於系統函。除此之外用戶也可以編寫用戶自定義函數。用戶定義函數是存儲在數據庫中的代碼塊,可以把值返回到調用程序。調用時如同系統函數一樣,如max(value)函數,其value被稱為參數。函數一般功能比較簡單,對於mysql函數只有傳入參數,不像存儲過程一樣,有輸入輸出參數。

  數據庫函數特點如下:

  • 存儲函數將向調用者返回一個且僅返回一個結果值。
  • 存儲函數嵌入在sql中使用的,可以在select中調用,就像內建函數一樣,比如cos()、hex()。
  • 存儲函數的參數類型類似於IN參數。

 

四、觸發器

定義

SQL觸發器,是一種特殊類型的存儲過程,不由用戶直接調用。

它在指定的表中的數據發生變化時自動生效,喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。

他可以查詢其它表,並可以包含復雜的Transact-SQL語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到嚴重錯誤(例如,磁盤空間不足),則整個事務即自動回滾。常常用於強制業務規則和數據完整性。

 

分類

  • DML( 數據操縱語言 Data Manipulation Language)觸發器:是指觸發器在數據庫中發生DML事件時啟用。DML事件即指在表或視圖中修改數據的insert、update、delete語句。

    a、在SQL SERVER 2008中,DML觸發器的實現使用兩個邏輯表DELETED和INSERTED。這兩個表是建立在數據庫服務器的內存中,我們只有只讀的權限。DELETED和INSERED表的結構和觸發器所在的數據表的結構是一樣的。當觸發器執行完成后,它們也就會被自動刪除:INSERED表用於存放你在操件insert、update、delete語句后,更新的記錄。比如你插入一條數據,那么就會把這條記錄插入到INSERTED表:DELETED表用於存放你在操作 insert、update、delete語句前,你創建觸發器表中數據庫。

    b、觸發器可通過數據庫中的相關表實現級聯更改,可以強制比用CHECK約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列,例如觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作。觸發器也可以根據數據修改前后的表狀態,再行采取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應同一個修改語句。

    c、與此同時,雖然觸發器功能強大,輕松可靠地實現許多復雜的功能,為什么又要慎用?過多觸發器會造成數據庫及應用程序的維護困難,同時對觸發器過分的依賴,勢必影響數據庫的結構,同時增加了維護的復雜程序。

  • DDL(數據定義語言 Data Definition Language)觸發器:是指當服務器或數據庫中發生(DDL事件時啟用。DDL事件即指在表或索引中的create、alter、drop語句也。

  • 登陸觸發器:是指當用戶登錄SQL SERVER實例建立會話時觸發。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM