日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql函数和存储过程

發布時間:2023/12/10 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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關鍵字。
函數練習: books表完成 ,編寫一個函數,傳入兩本書的名字,得到兩本書的價格之差create function get_price(book1 varchar(30),book2 varchar(30)) returns float begindeclare price1 float;declare price2 float;select price from books where bname=book1 into price1;select price from books where bname=book2 into price2;return price1-price2; end $$

存儲過程創建

創建存儲過程語法與創建函數基本相同,但是沒有返回值。

delimiter 自定義符號 create procedure 存儲過程名(形參列表) begin存儲過程    -- sql語句構成存儲過程語句集 end 自定義符號delimiter ;釋義: delimiter 自定義符號 是為了在函數內些語句方便,制定除了;之外的符號作為函數書寫結束標志 形參列表 :[ IN | OUT | INOUT ] 形參名 類型in 輸入,out 輸出,inout 可以輸入也可以輸出 存儲過程: 若干sql語句組成,如果只有一條語句也可以不寫delimiterbegin,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類型參數同樣只能接收一個變量,但是這個變量可以在存儲過程內部使用。在存儲過程內部的修改也會傳遞到外部。

e.g. : 分別將參數類型改為IN OUT INOUT 看一下結果區別 delimiter $$ create procedure p_out ( OUT num int ) beginselect num;set num=100;select num; end $$ delimiter ;set @num=10; call p_out(@num) 存儲過程練習: books表,使用存儲過程完成,將2020年以前出版的圖書價格增加3元,參數傳入一個作家的名字,將該作家的圖書,在此基礎上再漲2元,按照圖書價格打印出圖書信息,只要書名,作者和價格即可create procedure get_books(in aname varchar(30)) beginupdate books set price=price+3 where p_time<"2020-01-01";update books set price=price+2 where author=aname;select bname,author,price from books order by price; end $$

存儲過程和存儲函數操作

  • 調用存儲過程
  • 語法:

    call 存儲過程名字([存儲過程的參數[,……]])
  • 調用存儲函數
  • 語法:

    select 存儲函數名字([函數的參數[,……]])
  • 使用show create語句查看存儲過程和函數的定義
  • 語法:

    show create {procedure|function} 存儲過程或存儲函數的名稱
  • 查看所有函數或者存儲過程
  • select name,type from mysql.proc where db='stu'; show procedure|function status where db="stu";
  • 刪除存儲過程或存儲函數
  • 語法:

    DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

    函數和存儲過程區別

  • 函數有且只有一個返回值,而存儲過程不能有返回值。
  • 函數只能有普通參數,而存儲過程可以有in,out,inout多個類型參數。
  • 存儲過程中的語句功能更豐富,實現更復雜的業務邏輯,可以理解為一個按照預定步驟調用的執行過程,而函數中不能展示查詢結果集語句,只是完成查詢的工作后返回一個結果,功能針對性比較強。
  • 存儲過程一般是作為一個獨立的部分來執行(call調用)。而函數可以作為查詢語句的一個部分來調用。
  • 總結

    以上是生活随笔為你收集整理的Mysql函数和存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。