变量,存储过程
变量
系统变量(全局变量,会话变量),自定义变量(用户变量,局部变量)
初始化&赋值&查看
查看所有系统全局变量
show global variables;
查看所有系统会话变量
show session variables;
设置&查看系统变量
set @@session.autocommit=1
select @@session.autocommit
设置&查看自定义变量
set @myvar = 1;
select @myvar;
将mytable的记录数赋值给$count
select count(*) into $count from mytable;
声明局部变量并赋值
ps:声明必须为begin end块的第一句,必须定义类型
begin
declare a int default 1;
declare b int default 2;
declare sum int;
set sum=a+b;
select sum;
end
存储过程
基础语法
delimiter 结束标记
create procedure myname(myparams)
begin
存储过程体
end 结束标记
ps:
参数包含三部分
参数模式,参数名,参数类型
例子:IN name varchare(20)
参数模式:
IN:该参数可以作为输入,需要调用方传入值
OUT:该参数可以作为输出,该参数可以作为返回值
INOUT:该参数既可以作为输入又可以作为输出
如果存储过程体只有一句话,begin end可以省略
存储过程体中的每条sql语句结尾必须加分号。
delimiter重新设置存储过程的结尾,类比双引号,单引号,delimiter默认为;,但如果有很多;想一起执行,那还是换一个结束符号来处理,语法更清晰
语法:
delimiter 结束标记
调用语法
call funcname(params);
例子:
1. 空参存储过程
命令行下运行
delimiter $
create procedure myp1()
begin
insert into table1(name)values('a1'),('a2'),('a3'),('a4'),('a5');
end $
调用
call myp1()$
查看
select * from table1 $
2.带IN和OUT参数的存储过程
MariaDB [test]> select * from table1 where name='a5';$
+----+------+-----------+------+
| id | name | addr | age |
+----+------+-----------+------+
| 9 | a5 | 劳动节 | 22 |
+----+------+-----------+------+
1 row in set (0.001 sec)
MariaDB [test]> create PROCEDURE myp2(IN uname VARCHAR(20),OUT addr VARCHAR(20),OUT age int)
-> BEGIN
-> SELECT table1.addr,table1.age into addr,age
-> from table1 where table1.name=uname;
-> end $
Query OK, 0 rows affected (0.010 sec)
MariaDB [test]> call myp2("a5",@addr,@age)$
Query OK, 1 row affected (0.001 sec)
MariaDB [test]> select @addr,@age $
+-----------+------+
| @addr | @age |
+-----------+------+
| 劳动节 | 22 |
+-----------+------+
1 row in set (0.000 sec)
3.带INOUT参数的存储过程
MariaDB [test]> create PROCEDURE myp3(INOUT a int)
-> BEGIN
-> set a=a*2;
-> end $
Query OK, 0 rows affected (0.020 sec)
MariaDB [test]> set @test=10$
Query OK, 0 rows affected (0.000 sec)
MariaDB [test]> call myp3(@test)$
Query OK, 0 rows affected (0.001 sec)
MariaDB [test]> select @test;
-> $
+-------+
| @test |
+-------+
| 20 |
+-------+
1 row in set (0.001 sec)
删除存储过程
一次只能删一个
drop procedure proname;
查看存储过程的信息
show create procedure proname;