mysql 儲存過程 格式化 Mysql 儲存過程

2021-10-17 15:57:30 字數 4591 閱讀 8536

**可能存在中文的標點符號

儲存過程

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

好處:1、提高**的重用性

2、簡化操作

3、減少了編譯次數並且減少了和資料庫連線的次數,提高了效率

一、建立語法:

create procedure 儲存過程名稱(引數列表)

begin

儲存過程體(一組合法的sql語句)

儲存過程體中的每一句sql都需要加上分號

end注意:

1、引數列表包含三部分

引數模式   引數名  引數型別

舉例:in setuname  varchar(20)

引數模式:

in:該引數可以作為輸入, 也就是這引數需要呼叫方傳入值

out:該蠶食可以作為輸出,也就是該引數可以作為返回值

inout:該引數既可以作為輸入又可以作為輸出,也就是該引數既需要傳入值,又可以返回值。

2、如果儲存過程中只有一條語句 begin end可以省略

儲存過程體重的每條sql語句的結尾要求必須加分號

儲存過程的結尾可以使用delimiter  重新設定

語法:delimiter 結束標記

案例:delimiter $

二、呼叫語法:

call 儲存過程名(引數列表);

1、空參列表

案例:插入到admin表中五條記錄

delimiter $

create  procedure myp1()

begin

insert into admin(username,'password')

value ('join','000'),('join','111'),('join','222'),('join','333'),('join','444');

end $

呼叫call myp1() $

2、建立in模式的儲存過程

案例: 建立儲存過程實現 根據女神名,查詢對應的男神資訊

create procedure myp2(in beauty varchar(20) )

begin

select bo.*

from boys bo

right join beauty b on bo.id = b.boyfriend_id

where b.name = beautyname;

end $

呼叫call my2p('小明')$

案例2:建立儲存過程實現,使用者是否登入成功

create procedure myp3(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;

selecti if( result  > 0 , '成功', '失敗' );  #使用

end $

呼叫call myp3('張飛『,'8888')$

建立帶out模式的儲存過程

案例1: 根據女神名   返回對應男神名

create procedure myp4(in beautyname varchar(20),  out boyname varchar(20))

begin

select bo.boyname into boyname  # 賦值

from   boys   bo

inner join beauty b  on  bo.id = b.biyfriend_id

where b.name = beautyname;

end $

呼叫#set @bname$ 先定義

call myp4('小趙' , @bname)$     #@bname  可以先定義在使用 也可以直接使用

select @bname$

案例2: 根據女神名,返回對應的男神名和魅力值

create procedure my5( in beautyname varchar(20) ,out  boyname         varchar(20),  out usercp int )

begin

select bo.boyname ,  bo.usercp   into   boyname ,  usercp

from   boys   bo

inner join beauty b  on  bo.id = b.biyfriend_id

where b.name = beautyname;

end $

呼叫call my5('小趙' , @bname , @usercp)$

select @bname , @usercp$

建立帶inout模式的引數的儲存過程

案例: 傳入a 和b 兩個值 最終a和b翻倍並返回

create procedure myp6(inout a int , inout b  int)

begin

set a=a*2;

set b= b*2;

end$

呼叫set @n=10$

set @m=20$

call myp6(@n,   @m)$

select @n  ,@m$

案例練習:

一、建立儲存過程實現傳入使用者和密碼,插入到admin表中

create procedure test_pro1(in username varchar9(20) ,  in  loginpwd varchar9(20) )

begin

insert into admin(admin.username, password )

values(username,  loginpwd) ;

end  $

二、建立儲存過程實現傳入女神編號,返回女神名稱的女神**

create procedure test_pro2(in  id int,  out name varchar(20),  out  phone      varchar(20))

begin

select b.name,  b.phone  into  name,  phone

from beauty b

where b.id = id;

end $

三、建立儲存過程或函式實現傳入兩個女神生日  返回大小

create procedure test_pro3 (in birth1 datetime ,  in  birth2 datetime ,  out result     int)

begin

select datediff(birth1,  birth2)  into result; # datediff  返回 大於0 等於0 小於0

end $

四、建立儲存過程或函式實現傳入乙個日期,格式化成xx 年xx月xx日並返回

createprocedure test_4(in   mydate datetime,  out strdate varchar(50))

begin

select date _format (mydate,  '%y年%m月%d日')  into  strdate;

end  $

call test_4 (now(),  @str) $

select @str $

刪除儲存過程

語法 drop procedure  儲存過程名

drop procedure p1;  #一次只能刪除乙個儲存過程

檢視儲存過程

show create procedure 儲存過程名

五、建立儲存過程或函式實現傳入女神名,返回:女神and男神 格式化字串

如 傳入 : 小趙

返回 : 小趙 and 張無忌

create procedure test_pro5(in beautyname  varchar(20)  , out str varchar(50))

begin

select concat(beautyname ,  'and ',  ifnull(boyname,  'null')) into str

from boys bo

right join beauty  b  on  b.boyfriend_id = b.id

where b.name = beautyname;

end $

call test_pro5('小馬' ,@str)$

select @str   $

六、建立儲存過程或函式,根據傳入的條數和起始索引,查詢beauty表的記錄

create procedure test_pro6(in startindex  int , in size int)

begin

select * from beauty limit startindex,  size;

end $

call test_pro6(3,5)$

mysql儲存過程格式 mysql儲存過程的寫法

可以使用 create procedure 語句建立儲存過程。資料庫儲存過程語法格式如下 create procedure 過程名 in out inout 引數名 資料型別 in out inout 引數名 資料型別 特性 過程體 delimiter create procedure myproc...

Mysql 格式化日期格式

date format date,format 根據格式串format 格式化日期或日期和時間值date,返回結果串。可用date format 來格式化date 或datetime 值,以便得到所希望的格式。根據format字串格式化date值 s,s 兩位數字形式的秒 00,01,59 i 兩位...

mysql行格式化 MySQL資料格式化語句

mysql資料格式化語句 檔案記錄體格式 序號域 名 長度位 置 填寫說明 記錄體標記 www.2cto.com 1 2填 50 話單生成日期 3 10 yyyymmdd sp企業 11 30 sp企業 同檔名中sp企業 右對齊,左補空格 業務 31 50 不包含免費業務 www.2cto.com ...