目录

mysql存储过程

变量的使用

变量分类

自定义变量:

MySQL语句命令

全局变量命令

会话变量命令

用户变量命令

局部变量命令

参数的使用

参数类型

MySQL语句命令


mysql存储过程

变量的使用

变量分类

系统变量: 

全局变量——任意用户连接服务查看到的值都一样

会话变量——连接服务器的用户登录期间使用的变量,连接期间有效,连接断开就失效了

自定义变量:

用户变量——用户登录数据库服务器,自己定义的变量,只对当前登录的用户有效,断开后就销毁了

局部变量——在begin和end定义的变量,仅在存储过程执行中有效

MySQL语句命令

全局变量命令

//查看所有的全局变量

show global variables;

//查看与密码相关的变量,可以看到相关的全局变量(环境变量)

show global varisbles like “%password%”;

//查看全局变量validate_password_policy的值

select @@validate_password_policy;

//修改全局变量的值

set global validate_password_policy=1 ;

会话变量命令

//查看连接的所有变量

show session variables;

//仅查看与内存相关的变量

show session variables like “%cache%”;

//修改会话变量sort_buffer_size的值

set session sort_buffer_size=50000;

用户变量命令

//定义并赋值用户变量,如果设置的变量已经存在,则覆盖原来的值

set @age=19, @name=”pangljing”;

//查看用户变量

select @age,@name;

//使用查询结果给变量赋值

select count(name) into @x from tarena.user;

select @x;

x

23

//也可以赋值给多个变量

select min(uid),max(uid) into @x,@y from tarena.user;

局部变量命令

//给tarena数据库创建存储过程say48,用declare命令定义局部变量

delimiter  //

create procedure tarena.say48()

begin

  declare x int default 9;

  declare y char(10);

  set y=”plj”;

  select x,y;

end

//

delimiter;

//调用存储过程

call tarena.say48;

x  y

9  plj

参数的使用

参数类型

in        把数据传给存储过程

out       接收存储过程的处理结果

inout    既能把数据传给存储过程,也接收存储过程的处理结果

MySQL语句命令

建立存储过程的命令格式:

delimiter  //

create proucedure 存储过程名(参数1,参数2...)

begin

...

end

//

delimiter;

说明:

参数定义的语法格式——参数类型 变量名 数据类型

参数类型:in out inout

//建立存储过程,把变量dept_no的值传递给存储过程

delimiter  //

create proucedure tarena.p3( in dept_no int )

begin

select dept_id,count(*) as 总人数 from tarena.employees where dept_id=dept_no group by dept_id;

end

//

delimiter;

//调用存储过程

call tarena.p3(1);  #查看部门编号为1的员工人数

总人数

9

//删除存储过程

drop procedure tarena.p3;

//建立存储过程,根据员工姓名,获取员工的邮箱

delimiter  //

create proucedure tarena.pmail( in ename char(10),out hemail char(50) )

begin

select email into hemail from tarena.employees where name=ename;

end

//

delimiter;

//调用存储过程

call tarena.pmail(“Tom”,@x);  #根据员工姓名,获取员工的邮箱

select @x;

x

Tom12345678@163.com

//要想输入中午员工姓名调用存储过程,就要在创建存储过程前更换字符集,如果存储过程已经创建的话,就要在更换字符集后删除存储过程,再重新创建下存储过程

alter database tarena DEFAULT CHARACTER SET utf8;

使用inout参数进行计算

delimiter  //

create proucedure tarena.myadd( inout i int )

begin

set i=i+100;

end

//

delimiter;

set @x=8,@y=9;

call tarena.myadd(@x);

call tarena.myadd(@y);

select @x,@y

@x   @y

108  109

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐