MySQL触发器的使用

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个触发器。

猜你喜欢

转载自www.cnblogs.com/bulrush/p/9276569.html