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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql 过程和函数_MySQL:存储过程和函数

發布時間:2025/3/8 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 过程和函数_MySQL:存储过程和函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

變量

系統變量

變量由系統提供,不是用戶自定義的,屬于服務器層面

全局變量

會話變量

# 如果是全局級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則默認是會話

# 查看全局變量

SHOW GLOBAL VARIABLES;

SHOW GLOBAL VARIABLESLIKE "%char%";

# 查看會話變量

SHOW SESSION VARIABLES; # 默認是會話變量

SHOW SESSION VARIABLESLIKE "%char%";

# 查看指定的某個系統變量的值SELECT @@系統變量名; # 默認查看的是會話變量SELECT @@GLOBAL.系統變量名;

# 為系統變量賦值SET global|[session] 系統變量名=值; # 默認是會話變量SET @@global|[session].系統變量名=值; # 默認是會話變量

自定義變量

用戶自定義的變量

用戶變量:針對于當前會話連接有效,同于會話變量的作用域

# 申明并初始化SET @用戶變量名=值;SET @用戶變量名:=值;SELECT @用戶變量名:=值;

# 賦值或更新用戶變量的值SET @用戶變量名=值;SET @用戶變量名:=值;SELECT @用戶變量名:=值;SELECT 字段 INTO 變量名 FROM表SELECT COUNT(*) INTO @count1 FROMstudent;

# 查看用戶變量名SELECT @用戶變量名;

局部變量:僅僅在begin end中有效,應用在begin end的第一句話

# 聲明DECLARE變量名 類型;DECLARE 變量名 類型 DEFAULT值;

# 賦值SET 局部變量名=值SET 局部變量名:=值SELECT @局部變量名:=值SELECT 字段 INTO @局部變量名 FROM表;

#查看SELECT 局部變量名

局部變量和用戶變量

用戶變量:? 當前會話? ? ? ? ? ? ? ?會話的任何地方定義和使用 ? ? ? ? ? ? ? ?  必須加@符號,不用限定類型

局部變量:? BEGIN? END中? ? ?只能在BEGIN END中,且為第一句話? ? ? ?一般不加@符號,需要限定類型

存儲過程

介紹

一組預先編譯好的SQL語句的集合,理解成批處理語句

提高代碼的重用性

簡化操作

減少了編譯次數,并且減少了和數據庫服務器的連接次數,提高了效率

創建

CREATE PROCEDURE存儲過程名(參數列表)BEGIN存儲過程體(一組合法的SQL語句)END

注意:

參數列表包含三個部分 參數模式? 參數名? 參數類型

如果存儲過程體僅僅只有一條語句,BEGIN END可以省略

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

存儲過程的結尾可以使用DELIMITER重新設置

參數模式:

IN: 該參數可以作為輸入,也就是該參數需要調用方法傳入值

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

INOUT: 既可以作為輸入也可以作為輸出,既要傳入值,也可以返回值

調用

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

案例

/*1. 空參列表

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

DELIMITER $

CREATE PROCEDURE myp1()

BEGIN

INSERT INTO admin(name, `password`)

VALUES('jhon1', "000"),('jhon2',"001");

END $

CALL myp1()$

SELECT * FROM admin$

2. IN模式參數, 默認是IN

案例: 創建存儲過程實現 根據girl name 查詢對應的boy信息

CREATE PROCEDURE myp2(IN g_name VARCHAR(20) )

BEGIN

SELECT b.* FROM boys b RIGHT JOIN girls g ON b.id=g.boy_id WHERE g.name=g_name;

END $

CALL myp2('Mary')$

案例: 創建存儲過程實現,用戶是否登入成功

CREATE PROCEDURE myp3(IN name VARCHAR(20), in PASSWORD VARCHAR(20))

BEGIN

DECLARE res INT DEFAULT '';

select count(*) into res from admin where admin.name=name and admin.password=PASSWORD;

SELECT IF(res>0,'successfule','failed');

END $

CALL myp3('root','123')$

3. OUT模式的存儲過程

案例: 根據girl name ,返回boy name

CREATE PROCEDURE myp5(IN girl_nam VARCHAR(20), OUT boy_name VARCHAR(20), OUT age INT)

BEGIN

SELECT b.name,b.age INTO boy_name,age FROM boys b INNER JOIN girls g ON b.id=g.boy_id WHERE g.name=girl_name;

END $

CALL myp5('Mary', @bname, @age)$

SELECT @banme,@age$

4. 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 @a=20$

SET @b=20$

CALL myp6(@a,@b)$

SELECT @a,@b$

*

刪除存儲過程

DROP PROCEDURE 存儲過程名

查看存儲過程

SHOW CREATE PROCEDURE 存儲過程名

函數

介紹

一組預先編譯好的SQL語句的集合,理解成批處理語句

提高代碼的重用性

簡化操作

減少了編譯次數,并且減少了和數據庫服務器的連接次數,提高了效率

對比存儲

存儲過程: 可以有0或多個返回, 適合做批量插入、批量更新

函數? ? ? ?:? 有且僅有一個返回,適合做處理數據后返回一個結果

創建

CREATE FUNCTION函數名(參數列表) RETURNS返回類型BEGIN函數體END

注意:

參數列表包含兩部分: 參數名? 參數類型

函數體必須有return語句:? return 值

函數體僅有一句話時,可以省略begin end

使用delimiter語句設置結束標記

調用

SELECT 函數名(參數列表)

案例

/*1. 無參數返回

案例: 返回員工個數

DELIMITER $

CREATE FUNCTION myf1 RETURNS INT

BEGIN

DECLARE c INT DEFAULT 0;

SELECT COUNT(*) INTO c FROM employees;

RETURN c;

END $

SELECT myf1()$

2. 有參數返回

案例: 根據員工名,返回他的工資

CREATE FUNCTION(name VARCHAR(20)) RETURNS DOUBLE

BEGIN

SET @sal=0;

SELECT salary INTO @sal FROM employees e WHERE e.name =name;

RETURN @sal;

END

SELECT myf2('jhon')$*/

查看函數

SHOW CREATE FUNCTION 函數名

刪除函數

DROP FUNCTION 函數名;

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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