关键语法
声明语句结束符
DELIMITER $
此处将语句结束符修改为$
默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀
声明存储过程:
CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形…])
IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)例如:CREATE PROCEDURE demo_in_parameter(IN p_in int)
demo_in_parameter存储过程需要传入一个int类型的参数,参数名称是p_in
删除存储过程:
DROP PROCEDURE 存储过程名
存储过程开始和结束符号:
BEGIN … END
变量定义:
DECLARE a_int int unsigned default 1;
定义一个int类型的变量,名称是a_int
unsigned 表示无符号,就是非负数
默认是为1
变量赋值:
SET a_int= a_int + 1
设置a_int自增
操作实例
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
mysql> delimiter $ #修改结束符
mysql> create procedure in_param(in p_in int)
-> begin
-> insert into user(id,name) value(p_in,"zhangsan");
-> end$
标签使用
[begin_label:] BEGIN
[statement_list]
END [end_label]
例如:
label1: BEGIN
label2: BEGIN
label3: BEGIN
statements;
END label3 ;
END label2;
END label1
条件语句
if-then-else 语句语法:
if 条件 then
完整的执行语句
else
完整的执行语句
end if;
mysql> CREATE PROCEDURE proc2(IN parameter int)
-> begin
-> declare var int;
-> set var=parameter+1;
-> if var=0 then
-> select * from user where id = 1;
-> end if;
-> if parameter=0 then
-> select * from user where id = 2;
-> else
-> select * from user;
-> end if;
-> end;
-> $
case语句语法:
case 参数
when 0 then #参数等于0执行
完整的执行语句;
when 1 then #参数等于1执行
完整的执行语句;
else
完整的执行语句;
end case;
循环语句语法:
while ···· end while(执行前进行检查)
declare var int;
set var=0;
while var<6 do
完整的执行语句;
set var=var+1;
end while;
repeat···· end repeat(执行操作后检查结果)
declare var int
set var=0;
repeat
完整的执行语句;
set var=var+1;
until var>=5 #循环条件
end repeat;
loop ·····end loop(循环不需要初始条件,不需要结束条件,leave 语句的意义是离开循环)
declare var int
set var=0;
loop名称:loop
完整的执行语句;
set var=var+1;
if var >=5 then
leave loop名称;
end if;
end loop;
使用事务批量插入数据
mysql> create procedure bachInsert(in args int)
-> begin
-> declare i int default 1;
-> start transaction;
-> while i <= args do
-> insert into user(id,name) value(i,concat("zhangsan-",i));
-> set i= i + 1;
-> end while;
-> commit;
-> end$