MySql儲存過程學習(二)
轉載於:https://blog.csdn.net/machenic/article/details/97622032
前邊已經對儲存過程有了大概認識,現在根據教程學習儲存過程。
前邊已經說到,他是一個function,類似於Java的方法。那麼就類比Java方法學習。變數宣告賦值(麼有單獨展開,在其他部分使用了,一看就會),迴圈結構,條件等。
1.首先建立資料庫study,建立表格users,並插入資料:
CREATE TABLE `users` ( `id` INT (11), `name` VARCHAR (60), `age` INT (11), `sex` VARCHAR (30) ); INSERT INTO `users` (`id`, `name`, `age`, `sex`) VALUES('1','蛋蛋','22','男'); INSERT INTO `users` (`id`, `name`, `age`, `sex`) VALUES('2','山山','18','男'); INSERT INTO `users` (`id`, `name`, `age`, `sex`) VALUES('3','翠花','18','女');
有點不嚴謹,表格命名以都t_表名吧,改一下(沒啥用,不影響操作,想改就改改不改也沒事):
RENAME TABLE users TO t_user
2.建立儲存過程,這個是沒有引數的,比較簡單的這種:
1)procedure是儲存過程關鍵字,後邊跟儲存過程名字。我們要寫的主要是 begin和end中間 的內容。
2)儲存過程是function,類似Java的方法,所以不要丟了後邊的()。
DELIMITER //
CREATE PROCEDURE p_user()
BEGIN
SELECT * FROM t_user;
END;
可以檢視以下:SHOW PROCEDURE STATUS LIKE ‘%p_%’
同樣,可以刪除,注意:這裡沒有()(王八蛋屁股規定,我也不理解)。
DROP PROCEDURE p_user;
3.呼叫
CALL p_user;
4.條件控制結構
儲存過程本身相當於函式,就離不開邏輯判斷,畢竟像我們上邊那種簡單的查詢還建立一個儲存過程的情況基本不可能。
第一種:if/then
DELIMITER //
CREATE PROCEDURE p_user()
BEGIN
IF 1>3 THEN
SELECT “1不能大於3”;
ELSEIF 1=3 THEN
SELECT “1不能等於3”;
ELSE
SELECT ‘1確實小於3’;
END IF;
END
//
第二種:case/when類似於Java的switch
DELIMITER // CREATE PROCEDURE p_user() BEGIN DECLARE num INT; SET num=2; CASE num WHEN 1 THEN SELECT "num是1"; WHEN 2 THEN SELECT "num是2"; END CASE; END //
迴圈結構:
第一種:while/do相當於 Java的while do
#實現一個1-10求和功能。
DELIMITER //
CREATE PROCEDURE p_user()
BEGIN
DECLARE i INT;
DECLARE summ INT;
SET i=0;
SET summ=0;
WHILE i<=10 DO
SET summ=summ+i;
SET i=i+1;
END WHILE;
SELECT summ;
END
第二種:repeat/util 相當於 Java的do while
#repeat實現一個1-10求和功能。
DELIMITER //
CREATE PROCEDURE p_user()
BEGIN
DECLARE i INT;
DECLARE summ INT;
SET i=0;
SET summ=0;
REPEAT
SET summ=summ+i;
SET i=i+1;
UNTIL i>10
END REPEAT;
SELECT summ;
END
//
第三種:loop
#Loop實現一個1-10求和功能。
DELIMITER //
CREATE PROCEDURE p_user()
BEGIN
DECLARE i INT;
DECLARE summ INT;
SET i=0;
SET summ=0;
sumloop:LOOP
IF i>10 THEN
LEAVE sumloop;
END IF;
SET summ=summ+i;
SET i=i+1;
END LOOP;
SELECT summ;
END
//