MySQL——存储(有难度)
一、存储的介绍
1、什么是存储过程?
存储过程是实现某个特点功能的sql语句的集合,编译后的存储过程会保存在数据中,通过存储过程的名称反复的调用执行。
2、存储过程的优点?
t(1)存储过程创建后,就可以反复的调用和使用,不需要重新写复杂的语句
(2)创建,修改存储过程不会对数据有任何的影响
(3)存储过程可以通过输入参数返回输出值
(4)通过存储过程中加入控制语句,可以加强sql语句的功能性和灵活性
(5)对于单个l语句增删改查,可以直接封装一个集合中,存储过程一旦创建就可以直接调用,且可可以重复调用
(6)单个sql语句每一次执行都需要对数据进行编译,而存储过程被创建只需要编译一次,后续即可调用
(7)创建的存储过程,可以重复进行调用,可以减少数据库开发人员的工作量
(8)防止sql 注入
(9)造数据(重点)
三、存储常用的语句
1、查看已经创建的存储结构
格式:show create procedure 存储名;
show create procedure c1;
2、查看所有已经创建好的存储
show PROCEDURE status ;
3、指定数据库查询存储
格式:
show PROCEDURE status where db="库名";
如:
show PROCEDURE status where db="ck1";
4、删除存储
格式:drop PROCEDURE 存储名;
如:
drop PROCEDURE c1 ;
二、存储的格式
格式:

(1)无参数格式
格式:
格式:
delimiter// #分隔符
create procedure 存储名称() #创建存储 名称 (参数 in out into)
BEGIN #开始
sql语句
end #结束
// #分隔符
call 存储名称() #call 调用 存储名称()
如:
delimiter// #分隔符
create procedure c1() #创建存储 名称 (参数 in out into)
BEGIN #开始
select * from emp ; #SQL语句1
select * from dept ; #sql语句2
end #结束
// #分隔符
call c1() #call 调用 存储名称()
(2)带in参数
格式
delimiter// #分隔符
drop PROCEDURE if EXISTS 存储名称; # 判断是否存在,存在就删除,增加健壮性
create procedure 存储名(in 变量名 字符类型(字符长度)) #创建存储 名称 (参数 in out into)
BEGIN #开始
select * from 表名 where 字段名=变量名; #SQL语句1
end #结束
// #分隔符
call 存储名(变量) #call 调用 存储名称()
如:
delimiter// #分隔符
drop PROCEDURE if EXISTS c2; # 判断是否存在,存在就删除,增加健壮性
create procedure c2(in x int(20)) #创建存储 名称 (参数 in out into)
BEGIN #开始
select * from emp where sid=x; #SQL语句1
end #结束
// #分隔符
call c2(1568) #call 调用 存储名称()

(3)带out 参数
a、变量赋值:
select 字段 into 变量名 from 表名 where 条件
b、set @变量名
c、set @变量名=值;
d、select @变量名 查询变量,名
如:
delimiter// #分隔符
drop PROCEDURE if EXISTS c2; # 判断是否存在,存在就删除,增加健壮性
create procedure c2(OUT y int(20)) #创建存储 名称 (参数 in out into)
BEGIN #开始
select dept2 into y from emp where sid=1568; #SQL语句1
end #结束
// #分隔符
call c2(@y) #调用返回的变量名
select @y #查看变量名

(4)带in ,out参数
delimiter// #分隔符
drop PROCEDURE if EXISTS c2; # 判断是否存在,存在就删除,增加健壮性
create procedure c2(in x int(20),OUT y int(20)) #创建存储 名称 (参数 in out into)
BEGIN #开始
select dept2 into y from emp where sid=x; #SQL语句1
end #结束
// #分隔符
call c2(1568,@y) #调用返回的变量名
select @y #查看

(5)带inout 参数
delimiter// #分隔符
drop PROCEDURE if EXISTS c2; # 判断是否存在,存在就删除,增加健壮性
create procedure c2(inout m int(20)) #创建存储 名称 (参数 in out into)
BEGIN #开始
set m=m+1;
end #结束
// #分隔符
set @m=20 #设置一个值,传入
call c2(@m) #调用存储
select @m #查看返回值

备注:如果存储中要输入中文 CHARACTER set utf8(加在create 的后面)
浙公网安备 33010602011771号