找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
存储过程:
1.什么是存储过程
存储过程是完成特定功能的sql语句集合。通过编译后存储在数据库中,通过指定的存储过程名称调用执行它。存储过程=sql语句集合+控制语句(它能反复的调用执行)
2. Mysql5.0版本后支持存储过程
3.使用存储过程的优点
3.1存储过程创建可以多次调用,不需要重新编写存储过程语句。
3.2存储过程支持接收参数,返回输出值
3.3存储过程加快程序的运行速度
3.4存储过程增加sql语句的功能和灵活性
4.创建一个存储过程
方法: delimiter //
       create procedure 自定义存储名([in|out|inout]参数名,数据类型)
       begin
       存储过程体指(select * from 表名;select * from 表名)语句
       end
        //
例:-- delimiter //
-- CreTE PROCEDURE cc ([in out inout] i int(10))
-- begin
--
-- SELECT * FROM EMP;
-- END
-- //
--
D:\有道云笔记\weixinobU7VjsXbLKTAKbWmEIwvS6u8ExY\a1385c83265640fd8abde35b110b63eb\lax57w7dk(3)(l9iwo_riyn.png
delimiter: 分隔符,分界符,这里指定的分隔符是//,可自定义
create procedure 存储过程名称() 创建一个存储过程
in参数值在调用时必须指定
out参数可以在调用后被返回
inout参数调用时指定,并且可以被返回
begin...end 代表存储过程体的开始和结束
4.1创建一个in有输入参数的存储过程
delimiter //
create procedure 自定义的存储名(in n int)
begin
select * from 表名 where  字段名=变量;
end
//
set @n=想要变多少的数量行
4.2创建一个out输出的参数
create procedure 存储名(out n int)
begin
select * 字段名 into n from 表名 where +条件;
end
//
call 存储名(@n)
select @n
注意:调用时没有任何输出,只能把调用的结构赋值给传参的参数,调用显示存储过程的值
4.3创建一个inout的存储

-- delimiter //
-- create   procedure   eeee(inout  n  int )
-- BEGIN   
-- set n:= n+1;
-- end
-- //
#set @n= 2
#call  eeee(@n)select   @n

五、in 和out结合
--  delimiter //
--  create   procedure   gggg(in  n int ,out  m  int  )
-- begin
-- select   incoming into  m    from  emp   where   sid=n  ;
-- end
-- //
#call gggg(1568,@m)
select  @m

5. 调用(查看)一个存储过程
方法:call 自定义的存储过程名称()
6. 删除一个存储过程
drop procedure 存储过程名
   查看单个存储过程的详情
show create procedure 存储过程名
查看所有已建好的存储过程
show procedure status
查询数据库里创建了哪些存储过程
show procedure status where db(库)=“数据库名称”
D:\有道云笔记\weixinobU7VjsXbLKTAKbWmEIwvS6u8ExY\d7e28628d8004410bcbe50ac6350442b\um28mm4~58vv%873e4o1ygh.png
【drop procedure if exists 存储过程名称 #加强代码的健壮性和容错率 ,创建的时候加上这句,有同样名称的存储名,会删除重复的存储名】
drop table if exists 表名
declate 声明变量
set: 设置 值

创建存储:创建一个 表和插入数据
(1)
delimiter //
-- drop   PROCEDURE  if  exists   gz;
-- drop  table  if  EXISTS   gz1610;
-- create   procedure   gz ()
-- BEGIN
-- declare   i  int   default  0;  
-- create  table  gz1610 (id int(10)  primary  key  auto_increment,age  int (10));
-- while (i<100) DO
-- insert into   gz1610(age)  values (100) ;
-- set i=i+1;
-- END while ;
--  end  
-- //

#call  gz
select  *  from   gz1610
#select * from gz1610;


(2)插入指定的数据(大量造数,接口测试)
-- delimiter  //
-- drop  PROCEDURE  if   exists  hhhh ;
-- create  procedure  hhhh(in  n  int )
-- BEGIN
-- declare   i int ;
-- set i = 0;
-- while  i<n  do
-- INSERT into  gz1610 VALUES(i);
-- set i=i+1;
-- end  while;
-- select *   from  gz1610;
-- END
-- //

call  hhhh(1000)


求自然数的和
1+2+3+4+5+6+7+8+9+10 ?
答:
-- delimiter //
-- drop  procedure   if  exists  qq ;
-- create   procedure    qq (in  m   int)
-- BEGIN
-- declare   a  int   default  0 ;
-- declare   b   int   DEFAULT  0;
-- while   b<m  do
-- set b:=b+1;
-- set  a:=a+b;
-- end  while ;
-- select  a ;
-- END
-- //
#call qq(100);

IF语句:
if 条件 then
执行 sql 语句1
else
执行sql语句2
end if

if 条件1 then
执行 mysql 语句1
else if 条件2  then
执行mysql语句2
else if 条件3 then
执行 mysql 语句3 then

else
mysql 语句2
end  if;
end if;
end if;
备注:查看数据max和min显示不正常:默认为100的数据
传入数据大于表中已存在的数据的实际记录和行数,则往最高的分数上自动叠加
-- delimiter //
-- drop  procedure if  EXISTS  jj;
-- create procedure    jj(in  n  int)
-- BEGIN
-- declare   i  INT  default (select max(Id)  from student001);
-- if  n=0 then
-- select  max(Degree) from   student001 ;
-- else if  n>0 &&  n<=i  THEN
-- select *  from   student001  order  by  Id  desc ;
-- ELSE
-- while   n>i  DO
-- INSERT  into   student001(Id)  values (i+1);
-- SET  i=i+1 ;
-- end WHILE;
-- select *  from   student001 ;
-- end if;
-- end  IF;
-- END
-- //
--
call jj(8)



注意事项:
1、两张表的字段一致,插入数据:
方法一:insert  into  目标表  select  *  from   来源表  ;插入全部数据 ;
方法二: insert into    目标表(字段) select   字段1,字段2,from   来源表。



循环语句:

mysql 三种格式:

while
格式:
while      条件      do       执行语句   end  while

loop
格式:
loop   ........end  loop

repeat
格式:
repeat    .......until   end    repeat     


用户变量:
定义语法:  set   @  变量名
赋值的语法:
方法一:set  @变量名:=值;
方法二:set @变量名=值

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册