MySQL 基础篇 十【存储过程和函数】

一、存储过程和函数

存储过程和函数是事先经过编译并存储在数据库中的一段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() $

猜你喜欢

转载自blog.csdn.net/Kukeoo/article/details/114275162