MySQL基础(七)——存储过程与函数

MySQL基础(七)——存储过程与函数

视频学习来源:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷;

作者:木子六日;

sql版本:5.7.33;

变量

# 系统变量
# 可分为全局变量和会话变量
# 查看所有全局变量
SHOW GLOBAL VARIABLES;

# 查看所有会话变量
SHOW SESSION VARIABLES;

# 或者(一般来说不写global或者session都是默认session,需要查看全局变量都要加上global)
SHOW VARIABLES;

# 也可以使用模糊查询查出部分变量
SHOW VARIABLES LIKE '%char%';

# 查看指定的某个变量使用select
SELECT
	@@character_set_client;

SELECT
	@@GLOBAL .character_set_client;

# 为系统变量赋值
SET autocommit = 0;

# 或者
SET @@SESSION .autocommit = 0;

# 自定义变量
# 可分为用户变量和局部变量
# 用户变量的作用域是一次会话
# 用户变量的声明(三种方式)
SET @ljj = 'ljj1';


SET @ljj := 'ljj2';

SELECT
	@ljj := 'ljj3';

# 用户变量的赋值(可以使用声明的三种方式进行赋值,亦可以计算得到一个值放入变量中)
SELECT
	COUNT(*) INTO @ljj
FROM
	employees;

SELECT
	@ljj;

# 局部变量的有效范围仅在begin和end之间
# 局部变量的声明
DECLARE
	muziliuri VARCHAR (20);

DECLARE
	muziliuri VARCHAR (20) DEFAULT 'muziliuri';

# 局部变量的赋值
SET muziliuri = '123';


SET muziliuri := '123';

SELECT
	muziliuri := '123';

SELECT
	COUNT(*) INTO muziliuri
FROM
	employees;

# 查看局部变量
SELECT
	muziliuri;

存储过程

# 存储过程
# 创建语法
/*
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
			存储过程体(一组合法的sql语句)
END

参数列表包含三部分:
参数模式、参数名、参数类型
例如:
IN stuName VARCHAR(20)

参数模式:
IN			该参数作为输入
OUT			该参数作为输出
INOUT		该参数既能作为输入又能作为输出

如果begin end中只有一句话,那么begin end可以省略

由于begin end中的语句需要加分号,所以分号不能作为存储过程的结束符,需要自定义结束符

delimiter只能在命令行下使用
*/
# 调用语法
/*
CALL 存储过程名(实参列表);
*/
# 案例一(需要放到命令行中执行)
USE students;
DELIMITER $;


CREATE PROCEDURE myp1 ()
BEGIN
	INSERT INTO stuInfo (stuName, age)
VALUES
	('ljj1', 18),
	('ljj2', 18),
	('ljj3', 18),
	('ljj4', 18),
	('ljj5', 18) ;
END $ # 案例二(查询所有学生信息)
CREATE PROCEDURE myp2 ()
BEGIN
	SELECT
		*
	FROM
		stuInfo ;
	END $ CALL myp2 () $ # 案例三(登录)
	USE myemployees ; CREATE PROCEDURE login (
		IN username VARCHAR (20),
		IN `password` VARCHAR (20),
		OUT loginStatus INT
	)
	BEGIN
		SELECT
			count(*) INTO loginStatus
		FROM
			t_user
		WHERE
			t_user.username = username
		AND t_user.`password` = `password` ;
		END $ 
CALL login ('123', '123' ,@loginStatus) $ 
SELECT
			@loginStatus$ # 删除存储过程
			DROP PROCEDURE 存储过程名 ; USE students ; # 查看存储过程信息
			SHOW CREATE PROCEDURE myp1 ;

函数

# 函数
/*
	函数和存储过程是类似的,
	区别在于函数必须有一个返回值,
	而存储过程可以没有返回值或者多个返回值。
*/

# 创建语法
/*
	CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
	BEGIN
		函数体
	END 结束符
*/
# 案例:返回员工个数
delimiter $
CREATE FUNCTION myf1 () RETURNS INT
BEGIN
	DECLARE
		c INT DEFAULT 0 ; SELECT
			COUNT(*) INTO c
		FROM
			employees ; RETURN c ;
		END$

# 调用语法
/*
SELECT 函数名(参数列表)
*/

流程控制

# 流程控制

# 分支
CREATE FUNCTION myf2(score INT) RETURNS CHAR(1)
BEGIN
		IF score >= 90 AND score <=100 THEN RETURN 'A';
		ELSEIF score >= 80 THEN RETURN 'B';
		ELSEIF score >= 60 THEN RETURN 'C';
		ELSE RETURN 'D';
		END IF;
END $

# 循环(leave类似于break,iterate类似于continue)
CREATE PROCEDURE my_while(IN insertCount INT)
BEGIN
			DECLARE i INT DEFAULT 1;
			a:WHILE i <= insertCount DO
					INSERT INTO book(bName,price) VALUES ('aa',12.23);
					SET i = i + 1;
					IF i > 20 THEN LEAVE a;
					END IF;
			END WHILE a;
END $
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值