Skip to content

10.存储过程与函数

1. 变量

1.1 变量的介绍

  • 系统变量
    • 全局变量
    • 会话变量
  • 自定义变量
    • 用户变量
    • 局部变量

1.2 系统变量

1. 系统变量

系统变量由系统提供,不是用户定义的,属于服务器层面。 系统变量分为全局变量和会话变量

  1. 查看系统变量
sql
SHOW VARIABLES;
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;
  1. 查看满足条件的部分系统变量
sql
SHOW GLOBAL VARIABLES LIKE '%char%';
SHOW SESSION VARIABLES LIKE '%char%';
  1. 查看指定系统变量
sql
SELECT @@.系统变量名;
SELECT @@global.系统变量名;
SELECT @@session.系统变量名;
  1. 为系统变量赋值 方式 1
sql
SET GLOBAL 系统变量名 = 值;
SET SESSION 系统变量名 = 值;

方式 2

sql
SET @@global.系统变量名 = 值;
SET @@session.系统变量名 = 值;

2. 全局变量

  • 作用域:整个服务器
  • 能跨连接,不能跨重启。
  1. 查看所有全局变量
sql
SHOW GLOBAL VARIABLES;
  1. 查看部分全局变量
sql
SHOW GLOBAL VARIABLES LIKE '%char%';
  1. 查看指定全局变量
sql
SELECT @@GLOBAL.autocommit;
SELECT @@tx_isolation;
  1. 给全局变量赋值 跨连接有效
sql
SET @@global.autocommit=0;

3. 会话变量

作用域:仅仅针对于当前会话(连接)有效

  1. 查看所有会话变量
sql
SHOW SESSION VARIABLES;
  1. 查看部分会话变量
sql
SHOW SESSION VARIABLES LIKE '%char%';
  1. 查看指定会话变量
sql
SELECT @@session.autocommit;
  1. 给会话变量赋值 仅限当前有效
sql
SET @@tx_isolation='read-uncommitted';
SET SESSION tx_isolation = 'read-committed';

1.2 自定义变量

说明:变量由用户自定义,不是系统的 使用步骤:声明、赋值、使用 自定义变量分为用户变量和局部变量。

1. 用户变量

作用域:针对当前会话(连接)有效,同于会话变量作用域。 可应用在任何地方。

  1. 声明并初始化
sql
SET @用户变量名=值;
-- 推荐
SET @用户变量名:=值;
SELECT @用户变量名:=值;
  1. 赋值(更新) 方式一:SET、SELECT 方式二:SELECT INTO 案例 1: 案例 2:
sql
SET @用户变量名=值;
SET @用户变量名:=值;
SELECT @用户变量名:=值;
sql
SELECT 字段 INTO 变量名了
FROM 表;
sql
SELECT @name='jack';
SET @name=100;
SELECT @name;
sql
SET @count=1;
SELECT COUNT(*) INTO @count
FROM employees;
SELECT @count;
  1. 使用
sql
SELECT @用户变量名;

2. 局部变量

作用域:仅仅在定义它的 begin end 中有效 应用在 begin end 中的第一句话

  1. 声明
sql
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;
  1. 赋值(更新) 方式一:SET、SELECT 方式二:SELECT INTO
sql
SET 用户变量名=值;
SET 用户变量名:=值;
SELECT @用户变量名:=值;
sql
SELECT 字段 INTO 变量名了
FROM 表;
  1. 使用
sql
SELECT 局部变量名;
  1. 对比用户变量和局部变量
    变量作用域定义和使用的位置语法
    用户变量当前会话会话中的任何位置必须加@,不用限定类型
    局部变量begin-end 中只能在 begin-end 中,且为第一句话一般不加@,必须限定类型

案例:声明两个变量并相加

(1)用户变量

sql
SET @m=1;
SET @n=2;
SET @sum=@m+@n;
SELECT @sum;

(2)局部变量

sql
-- 必须在begin-end中
DECLARE m INT DECLARE 1;
DECLARE n INT DECLARE 1;
DECLARE sum INT;
SET sum=m+n;
END

2. 存储过程

存储过程和函数:类似于 java 中的方法 好处:

  1. 提高代码的重用性
  2. 简化操作

存储过程 含义:一组预先编译好的 sQL 语句的集合,理解成批处理语句 优点:

  1. 提高代码的重用性
  2. 简化操作
  3. 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

关于 DELIMITERDELIMITER

Released under the MIT License.