MySQL 基礎篇 十 儲存過程和函式

2021-10-20 18:38:55 字數 3237 閱讀 6955

儲存過程和函式是事先經過編譯並儲存在資料庫中的一段sql語句的 集合。

使用好處:

1、簡化應用開發人員的很多任務作

2、減少資料在資料庫和應用伺服器之間的傳輸

3、提高了資料處理的效率

變數

系統變數:

全域性變數

會話變數

自定義變數:

使用者變數

區域性變數

一、系統變數

說明:變數由系統提供,不是使用者定義,屬於伺服器層面

使用的語法:

1、檢視所有的系統變數

show variables;

global/session

2、檢視滿足條件的部分系統變數

show global|【session】 variables like '%char%';

3、檢視指定的某個系統變數的值

select @@ global|session.系統變數名

4、為某個系統變數賦值

方式一:

set 系統變數名 = 值;

方式二:

set global|session.系統變數名 = 值;

如果是全域性級別,則需要加global;

如果是會話級別,則需要加session

預設session

檢視所有全域性變數

show global variables;

二、區域性變數

使用者變數:也稱全域性變數,要加@

set @bname = 10;

區域性變數:不用加@

set a = 20;

儲存過程:

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

1、提高**的重用性

2、簡化操作

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

一、建立語法

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

begin

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

end注意:

1、引數列表包含三部分

引數模式 引數名 引數型別

舉例:in stuname varchar(20)

引數模式:

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

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

inout:該引數既可以作為輸入,又可以作為輸出。

2、如果儲存過程體僅僅只有一句話,begin end可以省略

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

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

語法:delimiter 結束標記

案例:delimiter $

二、呼叫語法

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

1.空參列表

案例 插入到admin表中5條記錄

use girls;

select * from admin;

delimiter $

create procedure myp1()

begin

insert into admin(username,password) values('john1','0000'),

('jack','0000');

end $

呼叫:call myp1()$

記住,上述語句在命令列使用。

2.建立帶in模式引數的儲存過程

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

create procedure myp4(in beautyname varchar(20))

begin

select bo.*

from boys bo

right join beauty b

on bo.id = b.boyfriend_id

where b.name = beautyname;

end $

帶out模式的儲存過程

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

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

begin

select bo.boyname

from boys bo

inner join beauty b on bo,id = b.borfriend_id

where b,name = beautyname;

end$

呼叫set @bname$

call myp5('小昭',@bname)$

select @bname$

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

案例1 傳入a\b兩個值,最終a b都翻倍並返回

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

begin

set a = a*2;

set b = b*2;

end$

set @m = 10$

set @n = 20$

call myp3(@m,@n)$

函式

create function 函式名(引數列表)

returns 返回型別

begin

函式體return 值;

end注意:

引數列表包含兩部分:

引數名 引數型別

函式體:肯定會有return 語句,如果沒有 會報錯

如果return語句沒有放在函式體的最後 也不會報錯,但不建議

當函式體中僅有一句話,則可以省略begin end

使用delimiter語句設定結束標記

delimiter $;

二、呼叫語法

不是用call

而是用select

select 函式名(引數列表)

案例:1.無參有返回 返回公司的員工個數

create function myf1() returns int

begin

declare c int default 0;

select count(*) into c

from employees;

return c;

end $

select myf1() $

mysql過程函式 mysql 儲存過程和函式

乙個儲存程式是可以被儲存在伺服器中的一套sql語句。可以通過客戶端用create procedure和create function 建立乙個儲存過程或函式。在客戶端通過call語句 呼叫所建立的存數過程或函式。語法 建立儲存子程式 create procedure sp name proc par...

MYSQL基礎十 儲存過程

mysql命令的執行流程 sql語句 mysql引擎 分析 語法正確 可識別命令 執行 執行結果 返回 儲存過程是sql語句和控制語句的預編譯集合,以乙個名稱儲存並作為乙個單元處理。儲存過程的意義在於省略了分析和識別命令的過程,直接得到結果。因此大大的節省了編譯時間。效率是很高的。儲存過程的優點 增...

mysql 儲存過程基礎 MySQL基礎 儲存過程

儲存過程 定義 將一批為了完成特定功能的sql語句集,根據傳入的引數 也可沒有 呼叫,完成單個sql語句更複雜的功能 儲存過程思想很簡單,就是sql語句層面上的 封裝和重用 優點 1 可封裝,並隱藏複雜的業務邏輯 2 可回傳值,且可接受引數 缺點 因支援的程式語言不通,效能調校和撰寫,受限於各種資料...