肖sir__mysql之存储__012

mysql之存储
一、存储
1、什么是存储过程
定义:存储过程就是实现某个特定功能的sql语句的集合,编译后的存储过程会保存在数据库中,通过存储过程的名称可以反复的调用执行。

2、存储过程的优点?
(1)存储创建后,可以反复的调用,和使用,不需要重新写复杂的sal语句
(2)创建、修改存储过程不会对数据有任何影响
(3)存储过程可以通过输入参数返回输入值
(4)通过存储过程中加入控制语句,可以加强sql语句的功能和灵活性
(5)防止sql注入
(6)造数据(重点)
3、存储在mysql5.0之后支持存储过程

4、格式:
delimiter // 分隔符
create procedure 存储名称 (参数)
begin 开始
存储体
end 结束
// 分隔符

========================》运行
call 存储名称(参数) ===》调用存储过程

案例:
肖sir__mysql之存储__012_第1张图片
5、存储实战
(1) 查看单个存储过程详情
格式:show create procedure 存储名称
案例:
show create procedure hz ;
截图:
在这里插入图片描述
(2)查询所有已经建好的存储过程
格式: show procedure status ;
截图:
肖sir__mysql之存储__012_第2张图片

在这里插入图片描述
(
(3)查询数据库中创建了哪些存储
格式:show procedure STATUS where db=‘库名’;
案例:show procedure STATUS where db=‘hz1’;
肖sir__mysql之存储__012_第3张图片
(4)删除一个存储过程
格式:drop procedure 存储名
案例:drop procedure hz1
截图:
肖sir__mysql之存储__012_第4张图片

六、存储体
(1)无参数存储体
delimiter // 分隔符
create procedure hz1() 创建存储名称
BEGIN 开始
select * from emp;
select * from dept;
END 结束
// 分隔符

call hz 调用存储体
(2)有in输入参数

格式:
delimiter //
create procedure (in 变量 字符类型(字符长度) )
BEGIN
select * from emp where dept2= 变量;
END
//
call 存储体(输入参数)
案例:
delimiter // fen
create procedure hz4(in x int(10))
BEGIN
select * from emp where sid=x;
END
//

call hz4(1880)

(3) out 输出

delimiter // fen
create procedure hz7(in x int(10),out y int(10))
BEGIN
select age into y from emp where sid=x;
END
//
call hz7(1880,@y)
select @y
肖sir__mysql之存储__012_第5张图片
(4)inout 输入输入 是同一个变量
delimiter //
create procedure hz8(inout x int(10))
BEGIN
set x=x+1;
END
//
set @x=2;
call hz8(@x)
select @x
肖sir__mysql之存储__012_第6张图片

1、用户变量:
(1)
set @ 变量名:=值 或 set @变量名=值 #设置变量
select @ 变量名:=值 #查询所有变量
(2) 通过查询结果为变量赋值
select 字段名|表达式 into 变量 form 表名 wehre 条件
select @变量名:=值 查询所有变量

2、循环语句
while 条件 do
执行语句
end while

mysql有三种循环:
while …do …end while(讲)
loop…end…loop
repeat…until end repeat

3、声明变量
declare (声明明) i int default 0;

4、增强储存的健壮性:
drop produre if exists 存储名; 判断是否存在这个存储

5、造数据案例:

a、造的数据是指定的行数
delimiter //
drop procedure if EXISTS hz ;
create procedure hz()
BEGIN
DECLARE i int DEFAULT 1 ;
drop table if exists sjb;
create table sjb(id int(10) primary key, incoming int(20));
while (i<20) do
insert into sjb VALUES ( i,i+10000);
set i=i+1;
end WHILE;
select * from sjb;
end
//
call hz()
肖sir__mysql之存储__012_第7张图片
(2)插入灵活指定的具体数据

delimiter //
drop procedure if EXISTS hz ;
create procedure hz(in x int(10))
BEGIN
DECLARE i int DEFAULT 1 ;
drop table if exists sjb;
create table sjb(id int(10) primary key, incoming int(20));
while (i insert into sjb VALUES ( i,i+10000);
set i=i+1;
end WHILE;
select * from sjb;
end
//
call hz(1000)

===========================================
6、if 语句

(1)if 单分支
if 条件 then
执行 sql1语句
else
执行 sql1语句
end if

案例:
delimiter //

drop procedure if EXISTS hz1 ;
create procedure hz1(in x int(10))
BEGIN
if x<10 THEN
select *from emp;
ELSE
select *from dept;
end IF;

end
//

call hz1(11)

加粗样式肖sir__mysql之存储__012_第8张图片

(2)if语句多分支
if 条件1 then
sql语句1
else if 条件2 then
sql语句2
else if 条件3 then
sql语句3
else if 条件4 then
sql语句4
else
sql语句5
end if ;
end if ;
end if ;
end if ;
注意:一个if对应一个end if

delimiter //
drop procedure if EXISTS hz1 ;
create procedure hz1(in x int(10))
BEGIN
if x=0 THEN
select *from emp;
else if x=10 then
select *from dept;
else if x=100 then
select *from s;
else if x=1000 then
select *from c;
ELSE
select *from sc;
end IF;
end IF;
end IF;
end IF;
end
//

call hz1(111)

==========
1、你会存储过程?
2、存储的结构?
3、存储你用来干什么?
4、具体怎么造数?

你可能感兴趣的:(mysql专栏,mysql)