MYSQL数据库管理-存储过程与函数\触发器

概述内容

触发器

###查看triggers####
show triggers
show triggers like '%TRI%'\G
select *from infomation_schema.triggers;
drop trigger if exists trigger_name;




范例1:
create trigger triname
before/after
inert/update/delete
on table_name for each row
begin
sql_statement;
end;




支持new.,old.信息insert只有new.。
范例2:
create trigger t1
after update on empsa
for each row
begin
insert into A values(:NEW.EMPNO,:NEW.EMPSI);
END;

存储过程流控制

存储过程范例:

deIimiter //
CREATE PROCEDURE emp_age_count(IN age1 int, IN age2 int,OUT count INT )
  BEGIN
   DECLARE temp FLOAT;
   DECLARE emp_age CURSOR FOR SELECT empage FROM emp;
   DECLARE EXIT HANDLER FOR NOT FOUND CLOSE emp_age;
     SET @sum=0;
    SELECT COUNT(*) INTO count FROM emp
     WHERE empage>age1 AND empage<age2;
        OPEN emp_age;
        REPEAT
         FETCH emp_age INTO temp;
          IF temp>age1 AND temp<age2
          THEN SET @sum=@sum+temp;  --@sum为会话变量
          END IF;
          UNTIL 0 
        END REPEAT;
        CLOSE emp_age;
          END//



调用 call emp_age_count(22,21,@c);
mysql>SELECT @C,@sum;

存储过程和自定义函数中使用流控制语句执行,mysql用来构造控制流程语句有if、case、loop、leave、iterate、repeat、while。

if grade>=60 then
select NOW();
else select dateadd(now(),interval 1 1:1:1);
END IF;
CASE DEPTNO
WHEN 1 THEN SELECT NOW();
WHEN 2 THEN SELECT DATEADD(NOW(),INTERVAL 1 1:1:1 day_second);
when 3 then select dateadd(now(),INTER 1 DAY);
END CASE;

loop 与leave

declare ss int default 0;
add_sum:loop
Set ss=ss+1;
if ss>100 then leave add_sum;
end if;
end loop add_sum;

inerate语句也可以跳出循环,但inerate语句是跳出本次循环,直接进入下一次循环,inerate意思是'再次循环’

CREATE PROCEDURE PP(a int)
begin
la:loop
set a=a+1
if a<10 then inerate la;
end if;
leave la;
end loop la;
set @x=a;
end

repeat语句创建的是带条件判断的循环语句。

declare aa int default 10;
repeat
set aa=aa+1;
until aa>=20;
end repeat;

while语句也是条件控制的巡检语句

declare aa int default 0;
while a<=20
set aa=aa+1;
end while;

光标使用-oracle叫游标

#定义光标
declare cursor_emp cursor for select username,status from mysql.USER;
#打开光标
open cursor_emp;
#光标赋予
fetch cursor_emp into eno,ename;
#关闭光标
close cursor_emp;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值