Mysql函数和存储过程
生活随笔
收集整理的這篇文章主要介紹了
Mysql函数和存储过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數和存儲過程
文章目錄
- 函數和存儲過程
- 函數創建
- 存儲過程創建
- 存儲過程三個參數的區別
- 存儲過程和存儲函數操作
- 函數和存儲過程區別
存儲過程和函數是事先經過編譯并存儲在數據庫中的一段sql語句集合,調用存儲過程和函數可以簡化應用開發工作,提高數據處理的效率。
函數創建
delimiter 自定義符號 create function 函數名(形參列表) returns 返回類型 -- 注意是retruns begin函數體 -- 若干sql語句,但是不要直接寫查詢return val; end 自定義符號delimiter ;釋義: delimiter 自定義符號 是為了在函數內些語句方便,制定除了;之外的符號作為函數書寫結束標志,一般用$$或者// 形參列表 : 形參名 類型 類型為mysql支持類型 返回類型: 函數返回的數據類型,mysql支持類型即可 函數體: 若干sql語句組成 return: 返回指定類型返回值 e.g. -- 如果函數中有寫操作則函數不能放在where語句中使用 create function st() returns int beginupdate class set sex='m' where name="tonny";return (select score from class where name='Tonny'); end $$create function st1() returns int beginreturn (select score from class where name='Tonny'); end $$--局部變量 : 獲得最高分和最低分分數差 create function st2() returns int begindeclare num_1 int;declare num_2 int;set num_1=(select score from class order by score desc limit 1);select score from class order by score limit 1 into num_2;return num_1-num_2; end $$ e.g. 含有參數的函數調用 delimiter $$ create function queryNameById(uid int) returns varchar(20) begin return (select name from class where id=uid); end $$ delimiter ;select queryNameById(1)- 設置變量
- 定義用戶變量 : set @[變量名] = 值;使用時用@[變量名]。
- 定義局部變量 : 在函數內部設置 declare [變量名] [變量類型]; 局部變量可以使用set賦值或者使用into關鍵字。
存儲過程創建
創建存儲過程語法與創建函數基本相同,但是沒有返回值。
delimiter 自定義符號 create procedure 存儲過程名(形參列表) begin存儲過程 -- sql語句構成存儲過程語句集 end 自定義符號delimiter ;釋義: delimiter 自定義符號 是為了在函數內些語句方便,制定除了;之外的符號作為函數書寫結束標志 形參列表 :[ IN | OUT | INOUT ] 形參名 類型in 輸入,out 輸出,inout 可以輸入也可以輸出 存儲過程: 若干sql語句組成,如果只有一條語句也可以不寫delimiter和begin,end e.g. 存儲過程創建和調用 create procedure st() begindelete from class where name="James";update class set score=71 where name="Emma";select * from class; end $$call st();-
存儲過程三個參數的區別
-
IN 類型參數可以接收變量也可以接收常量,傳入的參數在存儲過程內部使用即可,但是在存儲過程內部的修改無法傳遞到外部。
-
OUT 類型參數只能接收一個變量,接收的變量不能夠在存儲過程內部使用(內部為NULL),但是可以在存儲過程內對這個變量進行修改。因為定義的變量是全局的,所以外部可以獲取這個修改后的值。
-
INOUT類型參數同樣只能接收一個變量,但是這個變量可以在存儲過程內部使用。在存儲過程內部的修改也會傳遞到外部。
-
存儲過程和存儲函數操作
語法:
call 存儲過程名字([存儲過程的參數[,……]])語法:
select 存儲函數名字([函數的參數[,……]])語法:
show create {procedure|function} 存儲過程或存儲函數的名稱語法:
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name函數和存儲過程區別
總結
以上是生活随笔為你收集整理的Mysql函数和存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的类属性默认有this 但容易与
- 下一篇: linux cmake编译源码,linu