• mysql详解9:触发器和事件



    触发器是在插入 更新 删除语句前后自动执行的sql代码
    保证数据一致性
    DELIMITER $$
    CREATE TRIGGER payment_after_insert
    After INSERT ON payments
    for EACH row
    BEGIN
    UPDATE invoices
    set payment_total payment_total+NEW.amout
    where invoice_id =NEW.invoice_id;
    END $$

    NEW 返回新增的行
    OLD 在更新和删除时候用 返回更新前的行 及对应数值
    DELIMITER $$
    CREATE TRIGGER payments_after_delete
    AFTER DELETE ON payments
    FOR EACH ROW
    BEGIN
    UPDATE invoices
    set payment_total =payment_total-OLD.amount
    where invoice_id =OLD.invoice_id;
    END $$

    DELITER;

    查看触发器
    show TRIGGER 显示所有的触发器
    show TRIGGER LIKE 'payments%'

    删除触发器
    DROP TRIGGER IF EXISTS payment_after_insert

    使用触发器进行审计
    操作记录
    DELIMITER $$

    DROP TRIGGER IF EXISTS payments_after_delete
    CREATE TRIGGER payments_after_delete
    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 payment_audit
    values (OLD.client_id,OLD.date,OLD.amount,'delete',NOW());
    END $$
    DELITER;

    事件是根据计划执行的任务或一堆sql代码 定时任务
    show variables like 'event%';
    set global event_scheduler=on;
    --定义一个定时任务
    DELIMITER $$
    CREATE EVENT hourly_update_member
    on SCHEDULE
    -- at "2021-07-30"
    EVERY 1 hour STARTS '2021-01-01' ENDS '2021-12-31'
    do begin
    update member set sex=sex+1
    where `year` < now() - INTERVAL 1 year;
    -- 超过一年的记录
    end $$
    DELIMITER;

    SHOW EVENTS;
    DROP EVENT IF EXISTS hourly_update_member;
    alter 和 create 的语法相同
    ALTER EVENT hourly_update_member DISABLE;//ENABLE 事件可以暂时启用禁用

  • 相关阅读:
    WebQQ协议分析(9)——聊天(2)
    我的程序员之路(3)——学生时代(3)
    我的程序员之路(2)——学生时代(2)
    我的程序员之路(1)——学生时代(1)
    WebQQ协议分析——目录
    我的程序员之路(4)——工作半年
    WebQQ协议分析(7)——获取群信息(2)
    WebQQ协议分析(8)——聊天(1)
    VS2008编译器下ACE的配置
    WebQQ协议分析(10)——聊天(3)
  • 原文地址:https://www.cnblogs.com/yxj808/p/15080900.html
Copyright © 2020-2023  润新知