MYSQL 存储过程

循环

第一种循环(WHILE )

BEGIN
  DECLARE  i int DEFAULT 0;
  WHILE (i<10) DO
  BEGIN
    select i;
    set i= i+1;
    INSERT into `user`(user_id) VALUE (i);
  end ;
  end WHILE;
END

第二种循环(REPEAT)

BEGIN
  DECLARE  i int DEFAULT 100;
  REPEAT
  BEGIN
    select i;
    set i= i+1;
    INSERT into `user`(user_id) VALUE (i);

  end ;
  UNTIL  i>=110
  end REPEAT;

END

游标

BEGIN
  #定义一个游标的停止状态
    DECLARE stopflag int DEFAULT 0;
  #定义一个变量
  DECLARE var_user_id int DEFAULT 0;
  #定义一个游标
  DECLARE user_id_cur CURSOR FOR SELECT user_id FROM `user`;
  #定义一个句柄,用于判断游标循环是不是结束了
  DECLARE CONTINUE HANDLER FOR not found SET stopflag = 1;


  #打开游标
  OPEN user_id_cur;
  #循环,游标取出来 一条记录,将值给变量。
  FETCH user_id_cur into var_user_id;
  WHILE(stopflag=0) DO
    BEGIN
      update `user` set user_id = 2;
      #如果屏了他,这个存储过程会一直在那里跑,因为它只读了第一条数据,stopflag 不会=1;
      #建议放在循环后的第一步 
      FETCH user_id_cur into var_user_id; 
    END;
  END WHILE;
  CLOSE user_id_cur;

END

函数

调用方式为 select + 函数名称

BEGIN
    DECLARE v_user_name  VARCHAR(32);
    SELECT user_name into v_user_name from `user` where user_id = p_user_id;
    RETURN v_user_name;
END

触发器

CREATE TRIGGER tr_user_insert AFTER insert on `user`
for each ROW
BEGIN
  insert into `user`(user_id,user_name)
   VALUES (NEW.user_id,NEW.user_name);
end;
DROP TRIGGER IF EXISTS  tr_user_delete;
CREATE TRIGGER `tr_user_delete` AFTER INSERT ON `User` FOR EACH ROW BEGIN
  insert into `test_t`(test_id,test_name)
   VALUES (old.user_id,old.user_name);
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值