武林秘籍之存盤程序和函式
簡介:大家好,我是醉心于武術的功夫小白,今天我在扔垃圾的時候,意外發現垃圾桶旁邊躺著一本不起眼的書籍,心里卻泛起一種莫名的躁動,像是受到某種神秘力量的召喚,眼看四下無人一把塞進懷里跑回家,透過門上的貓眼確定沒人尾隨后,我顫顫巍巍地從懷里摸出那本被捂得有點燙手的書籍,泛黃殘缺的封面在昏暗的燈光下有種天書古卷的味道,我的手不禁顫抖了起來,封面越破記載的功夫越厲害,在電視里長這樣的怎么也得是名震天下的武林秘籍,而我必然是頭頂光環準備逆襲的廢柴主角,我壓抑著狂亂的心跳翻開了第一頁,一道道淺淺的金光從書中射出,書上赫然寫著一行金色字體——《Mysql之存盤程序和函式篇》,竟然是冠絕天下,多年前卻突然在江湖銷聲匿跡只留下無數傳說的《Mysql寶典》,我迫不及待地繼續往下翻,只要學會了我將會是江湖的下一個傳說,
一、寶典介紹
這招威震武林的殺招— —存盤程序,他厲害之處是并不拘泥于固定的招式,可以靈活地將各種招式組合成連招來達到意想不到的效果,
二、寶典第一式— —安裝資料庫
要想成功,必先自— —行安裝Mysql
三、寶典第二式— —查看存盤程序
在學習存盤程序之前,先來了解如何運功查看自己身上有沒有學過這招存盤程序,便于以后自己可以查看是否已經學會,也就是看看存盤程序有沒有創建成功,還是解釋一下,畢竟像我一樣天資聰穎的奇才也不多;
- 查看資料庫的存盤程序的命令:
--第一招,如圖一
show procedure status where db='資料庫名稱';
--可以在后面添加“\G”顯示詳情,如圖二
show procedure status where db='資料庫名稱'\G;
--第二招
select routine_name from information_schema.routines where routine_schema='資料庫名稱';
--第三招
select name from mysql.proc where db='資料庫名稱';
圖一:

圖二:

四、寶典第三式— —創建存盤程序
到了我最關心的環節了,開始學習如何創建屬于自己的必殺技— —存盤程序,開始創建存盤程序之前我們要熱熱身,做些準備作業,
因為存盤程序是由多行陳述句組成的,避免使用分號“;”分隔符時系統判定我們為結束編輯,我們可以先執行“delimiter $”指令修改結束符為“ $ "符,也可以是別的,你喜歡就好,不喜歡就別勉強,強扭的符號不甜,你偏要犟就是不改別人也拿你沒辦法,但這就是天堂有路你不… …
1、簡單的存盤程序的創建和呼叫
-- 因為存盤程序是由多行陳述句組成的,避免使用分號“;”分隔符時系統判定我們為結束編輯,我們得先修改結束符
delimiter $
--創建簡單存盤程序
create procedure a()
begin
select ("第一個存盤程序");
select ("第一招,亢龍有悔");
select ("第二招,萬佛朝宗");
end$
--呼叫存盤程序
call a()$
如圖:

2、帶變數的存盤程序的創建和呼叫以及兩種賦值方式
定義變數:
- 通過declare variableName variableType default value 定義變數,使用default給變數設定默認值
存盤程序變數的兩種賦值方式:
- 通過set給變數賦值
- 通過select …into …給變數賦值
--創建帶變數的存盤程序
create procedure b()
begin
declare num int default 5;
set num=num+5;
select concat('通過set方法為變數賦值為:',num);
select count(*) into num from t_account;
select concat('通過select...into...方法為變數賦值',num);
end$
--呼叫函式
call b()$
如圖

3、帶引數的存盤程序的創建和呼叫
存盤程序有三種引數格式:in、out、inout
- in:往存盤程序傳入資料,引數型別可以為常量和變數;
- out:存盤程序向外傳出資料,引數型別只能為變數;
- inout:表示既往存盤函式傳入引數,存盤函式又向外傳出資料,引數型別只能為變數;
(1)in型別引數的使用實體,可傳入常量和變數,存盤程序函式體只有一句的時候可以省略begin和end
--創建帶in型別引數的存盤程序
create procedure c(in num int,in name varchar(50))
begin
SELECT concat("我!",name,",要打",num,"個!");
end$
-- 設定會話變數
set @name='葉問'$
-- 呼叫存盤程序,可傳入常量和變數
call c(10,@name)$
圖一:

(2)out型別引數的使用實體,只能傳入變數,否則會報錯
--創建帶out型別的存盤程序
create procedure d(out text varchar(100),out num int)
begin
set num=10;
select concat('我!葉問,要打',num,'個!') into text;
end$
--呼叫存盤程序
call d(@a,@b)$
--查看傳出的引數
select @a,@b$
如圖:

(3)inout型別引數的使用實體,只能傳入變數
-- 創建帶inout型別引數的存盤程序
create procedure e(inout name varchar(100),inout num int)
begin
select concat('我!',name,',也要打',num,'個!');
set name="張三";
set num=9;
end$
--設定要傳入的變數值
set @a='葉問',@b=10$
--呼叫存盤程序
call e(@a,@b)$
--查看存盤程序傳出的值
select @a,@b$
如圖:

還沒寫完,,,,,,,,點贊評論鼓勵一下新人小白哇!大家一起學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266338.html
標籤:其他
上一篇:HashMap面試靈魂幾問
