mysql 创建触发器(for each row解释)

目录

一、说明

二、需求

三、描述

3.1. for each row

3.2. 修改和删除

3.3. 注意


一、说明

这里只是一个简单的示例。

假设系统中有两个表:
班级表 class、学生表 student

准备数据:

班级表(班级id、班级名称、学生数量)

学生表(学生id、学生姓名、班级id)


二、需求

学生表每增加一个学生,所对应班级表中的班级学生数量增加1。

上才艺:

-- 创建触发器名称
create trigger update_stuCount 
-- 触发时机(before 或 after),即做某件事之前触发,还是之后触发
after 
-- 触发事件(insert、update、delete),即做什么事触发
insert
-- 建立触发器的表名,即给哪张表创建触发器
on student 
-- 是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作
for each row
-- 触发器程序体,可以是一句SQL语句,或者用begin和end包含的多条语句(示例这里是多条语句,所以用的是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.class_iD 就是学生表中 插入数据的 class_id
	update class set stu_count = count + 1 where class_id = new.class_id;
end

三、描述

3.1. for each row

是指每行受影响,触发器都执行,叫行级触发器。oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。mysql不支持语句触发器,所以必须写for each row;

3.2. 修改和删除

若要修改触发器可以先删除 后创建

3.3. 注意

删除一个表的同时,也会自动删除该表上的触发器。另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,再重新创建。
-- 删除:drop trigger update_stuCount
-- 创建:create trigger update_stuCount ......

  • 11
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值