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

  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/bulrush/p/9276569.html
Copyright © 2011-2022 走看看