mysql存儲過程

1.含義:一組預先編譯好的SQL語句的集合,理解成批處理語句

(1)提高代碼的重用性
(2)簡化操作
(3)減少了編譯次數並且減少了和數據庫服務器的連接次數,提高了效率

2.創建語法

CREATE PROCEDURE 存儲過程名(參數列表)
BEGIN
存儲過程體(一組合法的SQL語句)
END

3.語法詳解

(1)參數列表包含三部分
	參數模式  參數名  參數類型
	舉例:
	in name varchar(20)
(2)參數列表中的參數模式
	in:該參數可以作爲輸入,也就是該參數需要調用方傳入值
	out:該參數可以作爲輸出,也就是該參數可以作爲返回值
	inout:該參數既可以作爲輸入又可以作爲輸出,也就是該參數既需要傳入值,又可以返回值
(3)注意事項
	如果存儲過程體僅僅只有一句話,begin end可以省略
	存儲過程體中的每條sql語句的結尾要求必須加分號。
	存儲過程的結尾可以使用 delimiter 重新設置
	語法:
	delimiter 結束標記
	案例:
	delimiter $

4.調用語法

CALL 存儲過程名(實參列表);

5.案例演示

(1)空參列表
	案例:插入到admin表中五條記錄

		SELECT * FROM admin;
		DELIMITER $
		CREATE PROCEDURE myp1()
		BEGIN
			INSERT INTO admin(username,`password`) 
			VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
		END $
			
			
		#調用
		CALL myp1()$
(2)創建帶in模式參數的存儲過程
	案例1:創建存儲過程實現,用戶是否登錄成功

		CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
		BEGIN
			DECLARE result INT DEFAULT 0;#聲明並初始化
					
			SELECT COUNT(*) INTO result#賦值
			FROM admin
			WHERE admin.username = username
			AND admin.password = PASSWORD;
					
			SELECT IF(result>0,'成功','失敗');#使用
		END $
				
		#調用
		CALL myp3('張飛','8888')$
(3)創建out 模式參數的存儲過程
		案例1:根據輸入的女神名,返回對應的男神名和魅力值

			CREATE PROCEDURE myp7(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT usercp INT) 
			BEGIN
				SELECT boys.boyname ,boys.usercp INTO boyname,usercp
				FROM boys 
				RIGHT JOIN
				beauty b ON b.boyfriend_id = boys.id
				WHERE b.name=beautyName ;
							
			END $
						
						
			#調用
			CALL myp7('小昭',@name,@cp)$
			SELECT @name,@cp$
(4)創建帶inout模式參數的存儲過程
	案例1:傳入a和b兩個值,最終a和b都翻倍並返回

		CREATE PROCEDURE myp8(INOUT a INT ,INOUT b INT)
		BEGIN
			SET a=a*2;
			SET b=b*2;
			END $
				
		#調用
		SET @m=10$
		SET @n=20$
		CALL myp8(@m,@n)$
		SELECT @m,@n$

6.刪除存儲過程

語法:drop procedure 存儲過程名
	DROP PROCEDURE p1;
	DROP PROCEDURE p2,p3(錯誤寫法,不能查看多個)

7.查看存儲過程的信息

DESC myp2;(錯誤寫法)
SHOW CREATE PROCEDURE  myp2;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章