1. 程式人生 > >數據庫觸發器,函數,視圖,存儲過程

數據庫觸發器,函數,視圖,存儲過程

相互 引擎 所有 虛線 func each 緩存 文件系統 沒有

mysql的工作流程:

技術分享圖片

MySQL架構總共四層,在上圖中以虛線作為劃分。
  首先,最上層的服務並不是MySQL獨有的,大多數給予網絡的客戶端/服務器的工具或者服務都有類似的架構。比如:連接處理、授權認證、安全等。
  第二層的架構包括大多數的MySQL的核心服務。包括:查詢解析、分析、優化、緩存以及所有的內置函數(例如:日期、時間、數學和加密函數)。同時,所有的跨存儲引擎的功能都在這一層實現:存儲過程、觸發器、視圖等。

  第三層包含了存儲引擎。存儲引擎負責MySQL中數據的存儲和提取。服務器通過API和存儲引擎進行通信。這些接口屏蔽了不同存儲引擎之間的差異,使得這些差異對上層的查詢過程透明化。存儲引擎API包含十幾個底層函數,用於執行“開始一個事務”等操作。但存儲引擎一般不會去解析SQL(InnoDB會解析外鍵定義,因為其本身沒有實現該功能),不同存儲引擎之間也不會相互通信,而只是簡單的響應上層的服務器請求。

  第四層包含了文件系統,所有的表結構和數據以及用戶操作的日誌最終還是以文件的形式存儲在硬盤上。

存儲過程:把一段代碼封裝起來,當要執行這一段代碼的時候,可以通過調用該存儲過程來實現(經過第一次編譯後再次調用不需要再次編譯,比一個個執行sql語句效率高)

create procedure 存儲過程名(參數,參數,…)

   begin

   //代碼

   end

觸發器:觸發器是一個特殊的存儲過程,它是MySQL在insert、update、delete的時候自動執行的代碼塊。

     create trigger trigger_name

   after
/before insert /update/delete on 表名    for each row    begin    sql語句:(觸發的語句一句或多句)    end

函數:MySQL中提供了許多內置函數,還可以自定義函數(實現程序員需要sql邏輯處理)

   自定義函數創建語法:

       創建:CREATE FUNCTION 函數名稱(參數列表)  

          RETURNS 返回值類型  函數體

   修改: ALTER FUNCTION 函數名稱 [characteristic ...]

   刪除:DROP FUNCTION [IF EXISTS] 函數名稱

   調用:SELECT 函數名稱(參數列表)

   視圖:視圖是由查詢結果形成的一張虛擬表,是表通過某種運算得到的一個投影

      create view view_name as select 語句

數據庫觸發器,函數,視圖,存儲過程