10.存储过程与函数
1. 变量
1.1 变量的介绍
- 系统变量
- 全局变量
- 会话变量
- 自定义变量
- 用户变量
- 局部变量
1.2 系统变量
1. 系统变量
系统变量由系统提供,不是用户定义的,属于服务器层面。 系统变量分为全局变量和会话变量。
- 查看系统变量
sql
SHOW VARIABLES;
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;
- 查看满足条件的部分系统变量
sql
SHOW GLOBAL VARIABLES LIKE '%char%';
SHOW SESSION VARIABLES LIKE '%char%';
- 查看指定系统变量
sql
SELECT @@.系统变量名;
SELECT @@global.系统变量名;
SELECT @@session.系统变量名;
- 为系统变量赋值 方式 1
sql
SET GLOBAL 系统变量名 = 值;
SET SESSION 系统变量名 = 值;
方式 2
sql
SET @@global.系统变量名 = 值;
SET @@session.系统变量名 = 值;
2. 全局变量
- 作用域:整个服务器
- 能跨连接,不能跨重启。
- 查看所有全局变量
sql
SHOW GLOBAL VARIABLES;
- 查看部分全局变量
sql
SHOW GLOBAL VARIABLES LIKE '%char%';
- 查看指定全局变量
sql
SELECT @@GLOBAL.autocommit;
SELECT @@tx_isolation;
- 给全局变量赋值 跨连接有效
sql
SET @@global.autocommit=0;
3. 会话变量
作用域:仅仅针对于当前会话(连接)有效
- 查看所有会话变量
sql
SHOW SESSION VARIABLES;
- 查看部分会话变量
sql
SHOW SESSION VARIABLES LIKE '%char%';
- 查看指定会话变量
sql
SELECT @@session.autocommit;
- 给会话变量赋值 仅限当前有效
sql
SET @@tx_isolation='read-uncommitted';
SET SESSION tx_isolation = 'read-committed';
1.2 自定义变量
说明:变量由用户自定义,不是系统的 使用步骤:声明、赋值、使用 自定义变量分为用户变量和局部变量。
1. 用户变量
作用域:针对当前会话(连接)有效,同于会话变量作用域。 可应用在任何地方。
- 声明并初始化
sql
SET @用户变量名=值;
-- 推荐
SET @用户变量名:=值;
SELECT @用户变量名:=值;
- 赋值(更新) 方式一: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;
- 使用
sql
SELECT @用户变量名;
2. 局部变量
作用域:仅仅在定义它的 begin end 中有效 应用在 begin end 中的第一句话
- 声明
sql
DECLARE 变量名 类型;
DECLARE 变量名 类型 DEFAULT 值;
- 赋值(更新) 方式一:SET、SELECT 方式二:SELECT INTO
sql
SET 用户变量名=值;
SET 用户变量名:=值;
SELECT @用户变量名:=值;
sql
SELECT 字段 INTO 变量名了
FROM 表;
- 使用
sql
SELECT 局部变量名;
- 对比用户变量和局部变量
变量 作用域 定义和使用的位置 语法 用户变量 当前会话 会话中的任何位置 必须加@,不用限定类型 局部变量 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 中的方法 好处:
- 提高代码的重用性
- 简化操作
存储过程 含义:一组预先编译好的 sQL 语句的集合,理解成批处理语句 优点:
- 提高代码的重用性
- 简化操作
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
关于 DELIMITERDELIMITER