变量
系统变量
全局变量
作用域: mysql服务每次启动将为所有的全局变量赋初始值, 针对所有的会话有效, 但是不能跨重启
会话变量
作用域: 仅仅当前会话有效
语法:
-
查看所有的系统变量
show global | session variables
如果是全局级别, 则需要加global, 如果是会话级别, 则需要加session.
如果不写, 则默认session
-
模糊查看系统变量
show global variables like '%isolation%'; show variables like '%char%';
-
查看指定的某个系统变量的值
select @@global.autocommit; select @@session.transaction_isolation; select @@session.transaction_isolation; select @@global.transaction_isolation;
-
为某个系统变量赋值
//全局的 set @@global.autocommit = 1; set global autocommit = 0; //会话的 set @@autocommit = 1; set autocommit = 0;
自定义变量
用户变量
作用域: 针对当前会话连接有效, 同于会话变量的作用域
可以放在任何位置, 也就是begin end里面或外面
-
声明并初始化
set @用户变量名=值
set @用户变量名:=值
select @用户变量名:=值
-
赋值
set @用户变量名=值
select 字段 into 变量名 from 表
-
使用
select @用户变量名
局部变量
仅仅在定义它的begin end 中有效
应用在begin end中的第一句话
-
声明
declare 变量名 类型 declare 变量名 类型 default 值
-
赋值
set 局部变量名=值
set 局部变量名:=值
select @局部变量名:=值
select 字段 into 局部变量名 from 表
-
使用
select 局部变量名
对比用户变量和局部变量
作用域 | 定义和使用的位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何位置 | 必须加@符号, 不用限定类型 |
局部变量 | begin end 中 | 只能在begin end中, 且为第一句话 | 一般不用加@符号, 需要限定类型 |
案例
# 声明两个变量并赋值, 求和, 并打印
set @v1 = 10;
set @v2 = 9;
set @sum = @v1 + @v2;
select @sum;
存储过程
含义
一组预先编译好的SQL语句的集合
创建语法
-
创建
create procedure 存储过程名(参数列表) begin 存储过程体 end;
-
参数列表包含三部分
参数模式 参数名 参数类型
参数模式:
in: 该参数可以作为输入, 也就是该参数需要调用方传入值
out: 该参数可以作为输出, 也就是该参数可以作为返回值
inout: 该参数既可以作为输入又可以作为输出
-
如果存储过程仅仅只有一句话,
begin end
可以省略存储过程体中的每条SQL语句的结尾要求必须加分号
存储过程的结尾可以使用
delimiter
重新设置delimiter 结束标记
-
-
调用
call 存储过程名(实参列表)
案例
create procedure myp3(in id int, out name varchar(20))
begin
select admin.user_name into name from admin where admin.id = id;
end;
call myp3(4,@name);
select @name;
# inout参数
create procedure myp4(in a int, inout b int)
begin
set a = a * 2;
set b = b * 2;
end;
set @a=1;
set @b= 2;
call myp4(@a,@b);
select @a, @b;
删除存储过程
drop procedure 存储过程名
查看存储过程信息
show create procedure 存储过程名