1:触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
例如:有一个学生表,一个班级表,每当学生添加一个,班级表的人数就增加一个。
相对于的学生表和班级表的实体类
package com.betteryanwo.entity; /** * Create by 六 * Date:18-7-7 * 学生表,每添加一个学生,班级表的人数就加一。 */ public class Student { private Integer stuID; private Integer sclassId; public Student() { } public Student(Integer stuID, Integer sclassId) { this.stuID = stuID; this.sclassId = sclassId; } public Integer getStuID() { return stuID; } public void setStuID(Integer stuID) { this.stuID = stuID; } public Integer getSclassId() { return sclassId; } public void setSclassId(Integer sclassId) { this.sclassId = sclassId; } @Override public String toString() { return "Student{" + "stuID=" + stuID + ", sclassId=" + sclassId + '}'; } }
package com.betteryanwo.entity; /** * Create by 六 * Date:18-7-7 * 班级表,每添加一个学生,班级人数就加1. */ public class Class { private Integer classID; private Integer stuCount; public Class() { } public Class(Integer classID, Integer stuCount) { this.classID = classID; this.stuCount = stuCount; } public Integer getClassID() { return classID; } public void setClassID(Integer classID) { this.classID = classID; } public Integer getStuCount() { return stuCount; } public void setStuCount(Integer stuCount) { this.stuCount = stuCount; } @Override public String toString() { return "Class{" + "classID=" + classID + ", stuCount=" + stuCount + '}'; } }
学生表添加
<mapper namespace="com.betteryanwo.dao.StudentDao">
<insert id="insert" parameterType="com.betteryanwo.entity.Student">
insert into student(stuID,sclassID) values (#{stuID},#{sclassId})
</insert>
</mapper>
在MySQL中写的触发器
DELIMITER $ create trigger tri_stuInsert after insert 创建一个叫tri_stuInsert的触发器 在插入后, on student for each row 在学生表上创建的触发器。 begin declare c int; set c = (select stuCount from class where classID=new.sclassID); update class 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个触发器。