天天看點

mysql 存儲過程_MySQL存儲過程實戰一:函數、視圖、存儲過程對比以及應用場景

函數、視圖及存儲過程的對比

函數

  1. 一個函數一般隻實作單一的某個功能的;
  2. 函數隻能傳回一個變量;
  3. 函數不能調用存儲過程,但是存儲過程可以調用函數。

建立函數的範例:

--#### 自定義字元串分割函數 #####delimiter $$DROP FUNCTION IF EXISTS statisSplit;CREATE FUNCTION statisSplit(x varchar(255), delim varchar(12), pos INT) RETURNS varchar(255)BEGINRETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),       delim, '');END$$
           
mysql 存儲過程_MySQL存儲過程實戰一:函數、視圖、存儲過程對比以及應用場景

視圖

視圖(view)是一種有結構(有行有列)但是沒有結果(結構中不真實存放資料)的虛拟表,虛拟表的結構來源不是自己定義,而是從對應的基表中産生的(視圖的資料來源).

簡單的說,視圖就是将select語句提前存儲在資料庫中友善使用。視圖有以下特點:

  1. 視圖可以節省SQL語句,減少複雜SQL語句的解析時間;
  2. 視圖建立的時候不能傳入動态參數,但是視圖是一個虛拟表,調用的時候可以像查表一樣輸入參數;
  3. 視圖隻能使用select查詢,不能進行更新操作。

視圖建立範例:

create view my_search as (select t2.id as group_id,t2.title as group_title,t1.id as page_id,t1.title as page_title from tb_view_menu_page t1 left join tb_view_menu_group t2 on t1.group_id = t2.id);select * from my_search where page_id = 3;
           
mysql 存儲過程_MySQL存儲過程實戰一:函數、視圖、存儲過程對比以及應用場景

存儲過程

存儲過程是三者當中最複雜的,

  1. 存儲過程可以有多個輸入輸出變量;
  2. 存儲過程可以進行select、insert、update以及create table等操作;
  3. 存儲過程内部可以調用函數;
  4. 存儲過程可以使用遊标進行周遊操作。

建立存儲過程的基本文法:

mysql 存儲過程_MySQL存儲過程實戰一:函數、視圖、存儲過程對比以及應用場景

存儲過程的應用場景

依照我個人的了解,存儲過程适用于複雜的資料庫操作場景,當操作包含查詢以及多個更新操作的時候。如果你使用代碼方式來實作這些操作,由于需要建立多次資料庫連接配接,會導緻操作耗時過長,這個時候存儲過程就比較有用了,隻需建立一次資料庫連接配接就能完成操作。比如,像我使用mysql資料做統計彙總的需求就需要使用存儲過程來實作。