10分钟学会MySQL存储过程(使用方法,看完即用)
准备测试数据
登录mysql,复制粘贴,运行即可
drop database if exists mytest;
create database mytest default character set utf8;
use mytest;
DROP TABLE IF EXISTS emp;
CREATE TABLE emp (
id int(11) PRIMARY KEY AUTO_INCREMENT,
age int(11) DEFAULT NULL,
name varchar(50) DEFAULT NULL
)DEFAULT CHARSET=utf8;
INSERT INTO `emp` VALUES (1, 18, '张三');
INSERT INTO `emp` VALUES (2, 20, '李四');
INSERT INTO `emp` VALUES (3, 25, '王五');
INSERT INTO `emp` VALUES (4, 22, '赵六');
DROP TABLE IF EXISTS log;
CREATE TABLE log (
id int(11) PRIMARY KEY AUTO_INCREMENT,
action varchar(50) DEFAULT NULL,
uid int(11) DEFAULT NULL,
time datetime DEFAULT NULL
)DEFAULT CHARSET=utf8;
思考:
在jdbc操作中,部分逻辑判断,是在java代码中完成后,然后根据判断后的记过去执行对应的sql语句。
有没有可能sql本身就可以做类似if操作呢? 答案是:可以的!
1.存储过程
1.能在sql中完成复杂的判断和运算
2.可编程性强,灵活
3.sql还重复使用
1.1 如何创建:
create [or replace] procedure 存储过程名(参数列表)
begin
封装的sql语句
end;
注意:命令行下执行命令时,因为只要输了分号就表示结束语句结束了,所以,创建存储过程时需要执行命令:
delimiter
表示开启一个代码段,在没有输入
表示开启一个代码段,在没有输入
表示开启一个代码段,在没有输入 时,表示整个代码段还未结束,就算输了分号也没事。
所以在命令行下应该这么写:
delimiter $$
create procedure 存储过程名(参数列表)
begin
封装的sql语句(可以多条)
end;
$$
案例1: 创建一个简单的存储过程,封装一条sql,不含参数 (之后的语句都需要以 $$结束)
delimiter $$
create procedure p1()
begin
select * from emp;
end;
$$
1.2 查询存储过程:
show procedure status;
1.3 调用存储过程:
call 存储过程名(参数列表);
1.4 删除存储过程:
drop procedure 存储过程名;
1.5 创建含变量的存储过程
create procedure p2()
begin
declare my_name varchar(50) default '';
select name into my_name from emp where id=2;
select my_name;
end;
其中语法说明:
1. 声明变量: declare 变量名 变量类型 default 默认值
2. into : 将值复制给指定变量
1.6 创建含参数的存储过程
create procedure p3(IN my_id int)
begin
select name from emp where id=my_id;
end;
语法说明:IN 是关键字,表示入参的意思
1.7 创建带有if判断的存储过程
if语法单分支:
if(条件) then
条件满足执行的语句
end if;
if语法双分支:
if(条件) then
条件满足执行的语句
else
条件不满足执行的语句
end if;
if多路分支
if(条件1) then
满足条件1执行的语句;
elseif(条件2) then
满足条件2执行的语句;
else
否则执行的语句;
end if;
案例如下:
create procedure p4(IN my_id int)
begin
declare my_name varchar(50) default '';
if(my_id%2=0) then
select name into my_name from emp where id = my_id;
select my_name;
else
select my_id;
end if;
end;
|