1:触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。
例如:有一个学生表,一个班级表,每当学生添加一个,班级表的人数就增加一个。
相对于的学生表和班级表的实体类
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个触发器。