Mysql--存储过程
Mysql--存储过程
介绍
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据
库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。
特点
- 封装,复用
- 可以接收参数,也可以返回数据
- 减少网络交互,效率提升
存储过程
创建
# 创建
create procedure p1()
begin
select count(*) from emp;
end ;
调用
call p1();
查看和删除
查看
select *from information_schema.ROUTINES where ROUTINE_SCHEMA='hrm';
# 第二种方式
show create procedure p1;
删除
drop procedure if exists p1;
命令行中执行存储过程
注意:在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter指定SQL语句的结束符。
需要设置SQL语句的结束符号
delimiter $$;
begin
select count(*) from emp;
end $$
变量
- 系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。
查看系统变量
# 不指定默认是session级别
show session variables ;
show global variables ;
show global variables like 'auto%';
show session variables like 'auto%';
select @@autocommit;
select @@session.autocommit;
select @@global.autocommit;
设置系统变量
set session autocommit =0;
select @@autocommit;
insert into dept values (60,'小黑','济南');
commit ;
注意:
如果没有指定SESSION/GLOBAL,默认是SESSION,会话变量。
mysql服务重新启动之后,所设置的全局参数会失效,要想不失效,可以在/etc/my.cnf中配置。
用户自定义变量
用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@变量名”使用就可以。其作用域为当前连接。
# 用户自定义变量
# 赋值
set @myname='小黑';
# 推荐使用:=来赋值
set @myage:=10;
set @mygender :='男',@myhobby:='java';
select @mycolor:='red';
select count(*) into @mycount from emp;
# 使用
select @myname,@myage,@mygender,@myhobby;
select @mycount;
select @mycolor;
注意:
用户定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL。
select @abc;