MySql 触发器 循环遍历
2017-09-20 17:17
113 查看
由于在做项目的时候遇到了,需要能遍历表的触发器,但是对语法不是很熟悉,今天就在这个做个笔记,也一起研究研究,大家有什么问题都可以提,我能jie。下面是完整示例代码,并加了注释:
1.使用游标的方法遍历—repeat until
DROP TRIGGER `saa`; CREATE TRIGGER `saa` AFTER INSERT ON `user` FOR EACH ROW begin declare user varchar(255); /*定义属性*/ declare pwd varchar(255); declare Done int DEFAULT 0;/*判断循环是否关闭的标志位*/ declare prd_code VARCHAR(255); /*定义游标 以及赋值 如果多个值就注意下游标取值*/ declare result cursor for select id from user; /*定义异常处理 */ declare continue handler for not found set Done =1; /*打开游标*/ open result ; /*提取游标的值 多个值的时候: fetch xxx into xxx,xxx */ fetch result into prd_code; /*循环开始*/ repeat /*TODO 根据用户id获取信息,存保存到另一张表*/ select login_name,login_password into user,pwd from user where id=prd_code; insert into online(user,name) values(user,pwd); fetch result into prd_code; until Done = 1 end repeat ;/*关闭循环*/ close result ;/*关闭游标*/ end;
2.使用游标的方法遍历—loop
begin declare user varchar(255); /*定义属性*/ declare pwd varchar(255); declare Done int DEFAULT 0;/*判断循环是否关闭的标志位*/ declare prd_code VARCHAR(255); declare prd_usr VARCHAR(255); /*定义游标 以及赋值*/ declare result cursor for select id,login_name from user; /*定义异常处理 */ declare continue handler for not found set Done =1; /*打开游标*/ open result ; /*循环开始*/ flag_loop:loop /*提前游标的值 多个值的时候: fetch xxx into xxx,xxx */ fetch result into prd_code,prd_usr ; /*声明结束的时候*/ if Done then leave flag_loop ; end if ; /*TODO 根据用户id获取信息,存保存到另一张表*/ select login_name,login_password into user,pwd from user where id=prd_code; insert into online(user,name) values(user,pwd); end loop flag_loop; /*循环结束*/ close result ;/*关闭游标*/ end
3.使用游标的方法遍历—while do
语法:[label:]while 条件 do /TODO/ end while [label]begin declare user varchar(255); /*定义属性*/ declare pwd varchar(255); declare Done int DEFAULT 0;/*判断循环是否关闭的标志位*/ declare prd_code VARCHAR(255); declare prd_usr VARCHAR(255); /*定义游标 以及赋值*/ declare result cursor for select id,login_name from user; /*定义异常处理 */ declare continue handler for not found set Done =1; /*打开游标*/ open result ; /*循环开始*/ flag_while:while Done=0 do /*提前游标的值 多个值的时候: fetch xxx into xxx,xxx */ fetch result into prd_code,prd_usr ; /*声明结束的时候*/ if Done=1 then leave flag_while ; end if ; /*TODO 根据用户id获取信息,存保存到另一张表*/ sele 4000 ct login_name,login_password into user,pwd from user where id=prd_code; insert into online(user,name) values(user,pwd); end while flag_while; /*循环结束*/ close result ;/*关闭游标*/ end
总结
其实 loop 跟while 的用法都差不多,repeat 的就小心点了,游标循环取值会有点麻烦。。。祝大家学习愉快!相关文章推荐
- MySQL循环遍历执行查询SQL语句结果的方法
- mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作
- MySql多表循环遍历更新
- mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作
- mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作
- mysql存储过程+游标循环遍历 判断 赋值 等实例一
- mysql里怎样循环遍历游标
- MySQL 存储过程循环遍历
- Mysql游标循环遍历
- mysql 存储过程一个简单的循环遍历操作数据
- MYSQL存储过程循环遍历插入数据
- 循环遍历时,中文无法写入mysql
- MySQL循环遍历执行查询SQL语句结果的方法
- MySQL触发器 Update触发Insert失败
- javascript递归、循环、迭代、遍历和枚举概念
- 字符串的while()循环遍历
- MySql循环开关控制语句
- HashMap循环遍历方式及其性能对比
- mysql创建触发器
- 用SQL游标遍历循环数据的方法