什么时候使用mysql触发器_MySQL触发器的使用

本文介绍了MySQL触发器的概念,通过一个学生表和班级表的例子展示了如何使用触发器来自动更新班级人数。当在学生表中插入一条新记录时,触发器会自动增加对应班级的班级人数。此外,还解释了触发器的创建语法,包括触发器的名称、触发时机、触发事件、作用表以及触发器程序体。示例中创建了一个AFTER INSERT触发器,用于在学生表插入后更新班级人数。
摘要由CSDN通过智能技术生成

1:触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。

例如:有一个学生表,一个班级表,每当学生添加一个,班级表的人数就增加一个。

0b2c53545201345878a2ddd223686b6e.png

5ef9e7d9890af2a4d11582cd776061d3.png

相对于的学生表和班级表的实体类

packagecom.betteryanwo.entity;/*** Create by 六

* Date:18-7-7

* 学生表,每添加一个学生,班级表的人数就加一。*/

public classStudent {privateInteger stuID;privateInteger sclassId;publicStudent() {

}publicStudent(Integer stuID, Integer sclassId) {this.stuID =stuID;this.sclassId =sclassId;

}publicInteger getStuID() {returnstuID;

}public voidsetStuID(Integer stuID) {this.stuID =stuID;

}publicInteger getSclassId() {returnsclassId;

}public voidsetSclassId(Integer sclassId) {this.sclassId =sclassId;

}

@OverridepublicString toString() {return "Student{" +

"stuID=" + stuID +

", sclassId=" + sclassId +

'}';

}

}

packagecom.betteryanwo.entity;/*** Create by 六

* Date:18-7-7

* 班级表,每添加一个学生,班级人数就加1.*/

public classClass {privateInteger classID;privateInteger stuCount;publicClass() {

}publicClass(Integer classID, Integer stuCount) {this.classID =classID;this.stuCount =stuCount;

}publicInteger getClassID() {returnclassID;

}public voidsetClassID(Integer classID) {this.classID =classID;

}publicInteger getStuCount() {returnstuCount;

}public voidsetStuCount(Integer stuCount) {this.stuCount =stuCount;

}

@OverridepublicString toString() {return "Class{" +

"classID=" + classID +

", stuCount=" + stuCount +

'}';

}

}

学生表添加

insert into student(stuID,sclassID) values (#{stuID},#{sclassId})

在MySQL中写的触发器

DELIMITER $

create trigger tri_stuInsert after insert 创建一个叫tri_stuInsert的触发器 在插入后,

on studentforeach row 在学生表上创建的触发器。

begin

declare cint;

set c= (select stuCount from class where classID=new.sclassID);

updateclass set stuCount = c + 1 where classID = new.sclassID;

end$

DELIMITER ;

CREATE TRIGGER trigger_name

trigger_time

trigger_event ON tbl_name

FOR EACH ROW

trigger_stmt

其中:

trigger_name:标识触发器名称,用户自行指定;

trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;

trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;

tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;

trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值