MySQL | 存储《康师傅MySQL从入门到高级》笔记

文章目录

  • 存储 Stored
    • 1. 存储过程 PROCEDURE
      • (1)创建存储过程
      • (2)调用存储过程
      • (3)查看存储过程
      • (4)修改存储过程
      • (5)删除存储过程
    • 2. 存储函数 FUNCTION
      • (1)创建存储函数
      • (2)调用存储函数
      • (3)查看存储函数
      • (4)修改存储函数
      • (5)删除存储函数

自己重新梳理一遍,也是一个消化的过程。学习一定要注重输入和输出,如果只输入的话,很多时候只是大脑此刻懂了,但并未记住。这样在实际做题或应用时,就无从下笔了。


存储 Stored

存储过程存储函数可以将复杂的SQL逻辑封装在一起应用程序无需关注存储过程和函数内部复杂的SQL逻辑,只需要简单地调用存储过程和函数即可。

1. 存储过程 PROCEDURE

思想

  • 一组经过预先编译的SQL语句的封装

执行过程

  • 存储过程预先存储在MySQL服务器上
  • 需要执行的时候,客户端只需要向服务器发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL语句全部执行。

优点:

  • 可以一次编译多次使用——减少开发人员的压力
  • 良好的封装性——减少失误,提高效率
  • 减少网络传输量
  • 存储过程的安全性强——减少SQL语句暴露的风险

缺点:

  • 可移植性差
  • 调试困难
  • 存储过程的版本管理很困难
  • 不适合高并发的场景

使用

  • 像使用函数一样简单

存储过程没有返回值

(1)创建存储过程

DELIMITER $  -- 新的结束标记

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型, IN|OUT|INOUT 参数名 参数类型, ...)

	[characteristics ...]  -- 存储过程的约束条件
	--LANGUAGE SQL
	--| [NOT] DETERMINISTIC
	--| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
	--| SQL SECURITY { DEFINER | INVOKER }  -- 安全级别(定义者可以调用 | 有权限就可以调用),默认为DEFINER
	--| COMMENT 'string'

	BEGIN
		查询语句
	END $

DELIMITER ;  -- 恢复结束标记
  • 常用的两种结束标记:$//
  • SET:赋值语句,对变量进行赋值。
  • SELECT INTO:将赋值语句的查询结果存放到变量中,也就是为变量赋值。
  • 五种输入参数

    ①没有参数(无参数无返回)
    IN(由参数无返回)
    OUT(无参数有返回)
    IN和OUT(有参数有返回)
    INOUT(有参数有返回)

(2)调用存储过程

CALL 存储过程名(实参列表)

(3)查看存储过程

①查看存储过程的创建信息

SHOW CREATE PROCEDURE 存储过程名

②查看存储过程的状态信息

SHOW PROCEDURE STATUS [LIKE '...']

MySQL | 存储《康师傅MySQL从入门到高级》笔记_第1张图片

(4)修改存储过程

ALTER PROCEDURE 存储函数名

(5)删除存储过程

DROP PROCEDURE IF EXIST 存储函数名;

2. 存储函数 FUNCTION

  • 用于查询

  • 有且仅有一个返回值

(1)创建存储函数

DELIMITER //

CREATE FUNCTION 存储函数名(参数名, 参数类型)
	RETURNS 返回值类型
			# 为了避免报错,需要加上下面三行
	        DETERMINISTIC  --
	        CONTAINS SQL -- 包含SQL
	        READS SQL DATA
	
	BEGIN
		RETURN(SELECT查询语句);
	END //

DELIMITER;  --把结束符号重新设为`;`

# 为避免报错,需要加这一句
SET GLOBAL log_bin_trust_function_creators = 1;

DELIMITER //

CREATE FUNCTION 存储函数名(参数名1 参数类型, 参数名2 参数类型, ...)
	RETURNS 返回值类型

	BEGIN
		RETURN(SELECT查询语句);
	END //

DELIMITER;  --把结束符号重新设为`;`

(2)调用存储函数

SELECT 存储函数名();  -- 调用函数
SET @emp_id := 102;  -- 定义变量
# SET @emp_id = 102;  `:=`和`=`都可以
SELECT 存储函数名(@emp_id);  --调用函数

巧记:因为存储函数适用于查询,所以调用它也用SELECT

(3)查看存储函数

①查看存储函数的创建信息

SHOW CREATE FUNCTION 存储函数名

②查看存储函数的状态信息

SHOW FUNCTION STATUS [LIKE '...']

(4)修改存储函数

ALTER FUNCTION 存储函数名

(5)删除存储函数

DROP FUNCTION IF EXIST 存储函数名;

你可能感兴趣的:(SQL,mysql,数据库)