存儲過程是MySQL中的一種特殊的程序,被用來執(zhí)行一系列的SQL語句,類似于其他編程語言中的函數(shù)。MySQL支持創(chuàng)建存儲過程,也允許在存儲過程中使用if語句,實(shí)現(xiàn)比普通SQL語句更復(fù)雜的業(yè)務(wù)邏輯。
下面我們通過一個(gè)簡單的例子來學(xué)習(xí)如何創(chuàng)建if語句的存儲過程。假設(shè)我們有一個(gè)用戶表user,其中包含了id、name、age和gender這四個(gè)字段。我們需要?jiǎng)?chuàng)建一個(gè)存儲過程,根據(jù)用戶的性別查詢具體的信息。
DELIMITER $$
CREATE PROCEDURE find_user(IN _gender VARCHAR(10))
BEGIN
IF _gender = 'male' THEN
SELECT * FROM user WHERE gender = 'male';
ELSEIF _gender = 'female' THEN
SELECT * FROM user WHERE gender = 'female';
ELSE
SELECT 'gender error';
END IF;
END$$
DELIMITER ;
上面的代碼中,我們使用DELIMITER命令將語句結(jié)束符設(shè)為$$。這是因?yàn)槿绻覀儾辉O(shè)定語句結(jié)束符的話,在存儲過程中使用的分號會(huì)干擾SQL語句的解析,導(dǎo)致出錯(cuò)。CREATE PROCEDURE后接存儲過程的名稱,IN _gender VARCHAR(10)表示我們會(huì)傳入一個(gè)名為_gender的參數(shù),并限定參數(shù)類型為VARCHAR,長度為10。在BEGIN和END之間,我們使用了if語句,根據(jù)傳入的參數(shù)_gender進(jìn)行分支選擇,分別對應(yīng)男性、女性和性別錯(cuò)誤的情況。
在使用這個(gè)存儲過程時(shí),我們需要調(diào)用find_user('male')、find_user('female')或者find_user('other')等語句,其中參數(shù)的值對應(yīng)于存儲過程中定義的_gender。調(diào)用存儲過程后,會(huì)在控制臺上輸出相應(yīng)的查詢結(jié)果。