查看存储过程:
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'
SHOW procedure status;
查看存储过程的创建代码:
SHOW create procedure proc_name;
调用存储过程:
CALL proc_name(参数名);
修改存储过程:
ALTER PROCEDURE pname newSQL;
删除存储过程:
DROP PROCEDURE pname;
注释:
--
/* */
创建存储过程:
格式:
CREATE PROCEDURE pname([[IN |OUT |INOUT ] 参数名 数据类形...])
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回
无参数
DELIMITER //
CREATE PROCEDURE test()
begin
SELECT "hello world!";
end;
//
DELIMITER ;
IN参数例子
DELIMITER //
CREATE PROCEDURE demo_in_parameter(IN p_in int)
BEGIN
SELECT p_in;
SET p_in=2;
SELECT p_in;
END;
//
DELIMITER ;
OUT参数例子
DELIMITER //
CREATE PROCEDURE demo_in_parameter(OUT p_out int)
BEGIN
SELECT p_out;
SET p_out=2;
SELECT p_out;
END;
//
DELIMITER ;
INOUT参数例子
DELIMITER //
CREATE PROCEDURE demo_in_parameter(INOUT p_inout int)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;
END;
//
DELIMITER ;
变量操作:
declare x1 varchar(5) default 'outer'; --声明变量
SET 变量名 = 表达式值 [,variable_name = expression ...]; --设置普通变量
SELECT 'Hello World' into 变量名; --设置普通变量
SET @变量名 = 表达式值 [,variable_name = expression ...]; --设置用户变量, 用户级的全局变量
SELECT 'Hello World' into @变量名; --设置用户变量
判断语句:
if var=0 then
insert into t values(17);
else
insert into t values(18);
end if;
多分支语句:
case var
when 0 then
insert into t values(17);
when 1 then
insert into t values(18);
else
insert into t values(19);
end case;
WHILE循环语句:
while var<6 do
insert into t values(var);
set var=var+1;
end while;
repeat循环语句:【相当于do while】
repeat
insert into t values(v);
set v=v+1;
until v>=5
end repeat;
LOOP循环:【无退出条件】
LOOP_LABLE:loop
insert into t values(v);
set v=v+1;
if v >=5 then
leave LOOP_LABLE; --使用leave语句退出,相当于break或exit
end if;
end loop;
ITERATE迭代标签:
LOOP_LABLE:loop
if v=3 then
set v=v+1;
ITERATE LOOP_LABLE; --直接跳至迭代开始处,相当于continue
end if;
insert into t values(v);
set v=v+1;
if v>=5 then
leave LOOP_LABLE;
end if;
end loop;
算术运算符:
+ 加 SET var1=2+2; 4
- 减 SET var2=3-2; 1
* 乘 SET var3=3*2; 6
/ 除 SET var4=10/3; 3.3333
DIV 整除 SET var5=10 DIV 3; 3
% 取模 SET var6=10%3 ; 1
比较运算符:
> 大于 1>2 False
< 小于 2<1 False
<= 小于等于 2<=2 True
>= 大于等于 3>=2 True
BETWEEN 在两值之间 5 BETWEEN 1 AND 10 True
NOT BETWEEN 不在两值之间 5 NOT BETWEEN 1 AND 10 False
IN 在集合中 5 IN (1,2,3,4) False
NOT IN 不在集合中 5 NOT IN (1,2,3,4) True
= 等于 2=3 False
<>, != 不等于 2<>3 False
<=> 严格比较两个NULL值是否相等 NULL<=>NULL True
LIKE 简单模式匹配 "Guy Harrison" LIKE "Guy%" True
REGEXP 正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False
IS NULL 为空 0 IS NULL False
IS NOT NULL 不为空 0 IS NOT NULL True
逻辑运算符:
与 (AND)
或(OR)
异或(XOR)
位运算符:
| 位或
& 位与
<< 左移位
>> 右移位
~ 位非(单目运算,按位取反)