• 09 MySQL触发器


    什么是触发器
    触发器是在插入、更新、删除前后自动执行的一堆代码

    通常用来增强数据的一致性

    创建触发器
    delimiter $$
    create trigger 触发器名 after/before insert/delete/ on 表名 for each row(触发器级别)
    begin
    end $$
    delimiter ;
     
    其他可能用到的关键字

    NEW:返回更新后的行以及相对应的数值
    OLD:返回更新前的行以及对应的数值
    delimiter $$
    create trigger test after delete on payments
    for each row
    begin
    update invoices
    set payment_total = payment_total - OLD.amount
    where invoice_id = old.invoice_id;
    end $$

    delimiter ;
     
    可以遵循一些命名规则:

    表名-之前或者之后-sql语句的类型

    table-after-insert

    查看触发器
    show triggers
     
    这也是个表达式,也可以用一些筛选语句

    删除触发器
    drop trigger if exists 触发器
     
    使用触发器进行审计
    触发器的另一个常见用途是为了之后审计的目的而记录对数据库的修改

    比如我们现在新创了一张表用于记录操作

    那么我们可以在我们上面那个触发器里加入一些东西

    delimiter $$
    create trigger test after delete on payments
    for each row
    begin
    update invoices
    set payment_total = payment_total - OLD.amount
    where invoice_id = old.invoice_id;

    insert into payments_audit
    values(old.client_id, old.date, old.amount, 'Delete', now());
    end $$

    delimiter ;
     
    delimiter $$
    create trigger test after insert on payments
    for each row
    begin
    update invoices
    set payment_total = payment_total - new.amount
    where invoice_id = new.invoice_id;

    insert into payments_audit
    values(new.client_id, new.date, new.amount, 'Delete', now());
    end $$

    delimiter ;
     
    事件
    事件可以用来在特定的时间周期内或者就执行一次来让数据库自动执行的sql语句

    delimiter $$
    create event 时间_动作_操作名称
    on schedule (at 'date' 如果仅执行一次就写at)
    every hour/day/year.. starts date ends date
    do begin
    sql_language
    end $$
     
    查看删除更改事件
    查看
    show events;
     
    删除
    drop events if exists 名字
     
    更改
    alter event ...与create类似

    delimiter $$
    alter event 时间_动作_操作名称
    on schedule (at 'date' 如果仅执行一次就写at)
    every hour/day/year.. starts date ends date
    do begin
    sql_language
    end $$
     
    还可以更改是否启动

    alter event 名字 enable/disabl
    ————————————————
    版权声明:本文为CSDN博主「INGg__」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/INGg__/article/details/117219238

  • 相关阅读:
    IIS部署web Service使用浏览器测试
    VS编译运行时提示:应用程序并行配置不正确,无法启动程序
    VS编译失败但是错误输出页中没有显示任何错误信息
    在客户端机器上使用PlSql,登录dba账号提示ORA-01031:insufficient privileges或 ORA-01017: invalid username/password; logon denied错误。
    FTP搭建注意事项
    .Net DLL类库引用时没有注释信息
    Oracle数据库连接超时
    Oracle触发器编译错误及解决方案
    VMware命令行模式安装CentOS 7后设置固定IP
    洲-国家 二级联动整体解决方案
  • 原文地址:https://www.cnblogs.com/javalinux/p/15001229.html
Copyright © 2020-2023  润新知