• MySql-触发器操作


    触发器

    触发器是一段与某个表相关的sql语句,会在某个时间点,满足某个条件后自动触发执行。

    支持的时间点:时间发生前before和发生后after

    支持的事件:

    • update 可用OLD访问旧数据,NEW访问新数据
    • delete 可用OLD访问新数据
    • insert 可用NEW访问新数据
    • 可以将NEW和OLD看做一个对象,其中封装了这列数据的所有字段

    创建触发器

    delimiter //  重定义行结束符
    create trigger t_name t_time t_event on table_name for each row
    begin
    sql语句
    end//
    delimiter ;
    # delimiter 用于修改默认的行结束符,由于在触发器中有多条sql语句,他们需要使用分号来结束,但是触发器是一个整体,所以需要先更换默认的行结束符
    # t_name 触发器名
    # t_time 时间点 before|after
    # t_event 事件 delete|update|insert
    # table_name 表名
    

    查看触发器

    show triggers;  # 查看所有触发器
    show create trigger 触发器名;  # 查看创建指定的触发器语句
    

    删除触发器

    drop trigger 触发器名;  
    

    举例

    #准备数据
    CREATE TABLE cmd (
        id INT PRIMARY KEY auto_increment,
        USER CHAR (32),
        priv CHAR (10),
        cmd CHAR (64),
        sub_time datetime, #提交时间
        success enum ('yes', 'no') #0代表执行失败
    );
    #错误日志表
    CREATE TABLE errlog (
        id INT PRIMARY KEY auto_increment,
        err_cmd CHAR (64),
        err_time datetime
    );
    
    # 创建触发器
    delimiter //
    create trigger insert_t after insert on cmd for each row
    begin 
    if new.success = 'no' then
    insert into errlog(err_cmd,err_time) values(new.cmd,new.sub_time);
    end if;
    end//
    delimiter ;
    
    show triggers;  # 查看所有的触发器
    show create trigger insert_t;  # 查看创建触发器insert_t的语句
    
    drop trigger insert_t;  # 删除触发器insert_t
    
  • 相关阅读:
    Travis CI Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误
    HyperSQL 链接参数中文件的路径
    Maven 在 pom.xml 文件中配置 repositories 仓库
    Flyway Validate failed: Migration checksum mismatch for migration version 1.0.0.01 错误
    Angular 服务
    Angular 主从组件
    Angular 显示英雄列表
    Angular 英雄示例教程
    L2-002. 链表去重---模拟
    HDU2057
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11197564.html
Copyright © 2020-2023  润新知