zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    RabbitMQ使用介绍及实例
    RabbitMQ与java、Spring结合实例详细讲解
    服务器搭建--Linux安装rabbitmq
    服务器搭建--Linux安装erlang
    solrCloud index search (图)
    What does "exceeded limit of maxWarmingSearchers=X" mean?
    Solr 自定义排序[1]
    solr Query[转]
    Lucene
    Solr[Q] -No live SolrServers available to handle this request, no servers hosting shard
  • 原文地址:https://www.cnblogs.com/javalinux/p/15001229.html
Copyright © 2011-2022 走看看