概述
说明:这里只是一个简单的示例。
假设系统中有两个表:
班级表 class(班级号 class_id, 班内学生数 stu_count)
学生表 student(学号 stu_id, 所属班级号 class_id)
准备数据:
班级表中有 一个班级1 class_id:1,stu_count:2。
学生表中有 两个学生 stu_id:1,class_id:1;stu_id:2,class_id:1;分别关联到班级1;
需求:学生表每增加一个学生,所对应班级表中的班级学生数量增加1。
上才艺:
-- 创建触发器名称
create trigger update_stuCount
-- 触发时机 (BEFORE 或 AFTER)
after
-- 触发事件(INSERT、UPDATE 或 DELETE)
insert
-- 建立触发器的表名,即在哪张表上建立触发器
on student
-- 是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作
for each row
-- 触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
begin
-- 定义变量: 学生数量
declare count int;
-- 查询 班级表 学生数量 (根据 学生表新插入学生数据的班级id 进行查询) 并 将查询出的学生数量 赋值给 变量 count
-- new.class_id 为学生表中 插入数据的 class_id
set count = (select stu_count from class where class_id = new.class_id);
-- 更新 班级表 学生数量字段值 (学生表每插入一条则 将班级原始学生数量加1) 根据 学生表新插入数据的班级id进行更新
-- new.classID 为学生表中 插入数据的 classID
update class set stu_count = count + 1 where class_id = new.class_id;
end
for each row :是指每行受影响,触发器都执行,叫行级触发器。oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。mysql不支持语句触发器,所以必须写for each row;
修改和删除:若要修改触发器可以先删除 后创建
注意:删除一个表的同时,也会自动删除该表上的触发器。另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,再重新创建。
-- 删除:drop trigger update_stuCount
-- 创建:create trigger update_stuCount
最后
以上就是跳跃果汁为你收集整理的mysql 创建触发器(for each row解释)的全部内容,希望文章能够帮你解决mysql 创建触发器(for each row解释)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复