zoukankan      html  css  js  c++  java
  • 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个触发器。

  • 相关阅读:
    【面试题】M
    【转】C/S,B/S区别
    【转】指针和引用的区别
    内联函数
    实习-随记
    【面试】http协议知识
    wenbenfenlei
    【面试】链表反转
    测试面试题2
    测试面试题
  • 原文地址:https://www.cnblogs.com/bulrush/p/9276569.html
Copyright © 2011-2022 走看看