我是靠谱客的博主 朴素薯片,最近开发中收集的这篇文章主要介绍MySQL触发器、事件、事务触发器事件事务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

触发器

添加触发器

DELIMITER $$

-- 命名习惯:触发表_before/after_触发的SQL语句类型
CREATE TRIGGER payments_after_insert
    AFTER INSERT ON payments
    -- BEFORE/AFTER INSERT/UPDATE/DELETE ON 
    FOR EACH ROW
    -- 触发频率语句
BEGIN
    UPDATE invoices
    SET payment_total = payment_total + NEW.amount
    WHERE invoice_id = NEW.invoice_id;
    -- INSERT用NEW,若DELETE用OLD
END$$

DELIMITER ;

查看触发器(LIKE可以筛选):

SHOW TRIGGERS LIKE 'payments%'

删除触发器

DROP TRIGGER [IF EXISTS] payments_after_insert

事件

事件是一段根据计划执行的代码,可以执行一次,或者按某种规律执行,通过事件我们可以自动化数据库维护任务,比如删除过期数据、将数据从一张表复制到存档表 或者 汇总数据生成报告。

查看MySQL所有系统变量

SHOW VARIABLES LIKE 'event%';
-- 通常为了节约系统资源而默认关闭

SET GLOBAL event_scheduler = ON/OFF
-- SET语句可以开启或关闭

添加事件

DELIMITER $$

-- 命名:用时间间隔开头,包括 once/hourly/daily/monthly/yearly等
CREATE EVENT yearly_delete_stale_audit_row

-- 设定事件的执行计划:
ON SCHEDULE  
    EVERY 1 YEAR [STARTS '2019-01-01'] [ENDS '2029-01-01']
    -- 若只执行一次就用AT

-- 比其他多DO
DO BEGIN
    DELETE FROM payments_audit
    WHERE action_date < NOW() - INTERVAL 1 YEAR;
END$$

DELIMITER ;

查看事件

SHOW EVENTS [LIKE 'yearly%'];  

删除事件:

DROP EVENT IF EXISTS yearly_delete_stale_audit_row;

更改事件

把CREATE改成ALTER

暂时开启或关闭事件

ALTER EVENT yearly_delete_stale_audit_row DISABLE/ENABLE

事务

事务是完成一个完整事件的一系列SQL语句,要不然都成功,要不然都失败,如果一部分执行成功一部分执行失败那成功的那一部分就会复原以保持数据的一致性。

创建事务

USE store;

START TRANSACTION;

INSERT INTO orders (customer_id, order_date, status)
VALUES (1, '2019-01-01', 1);

INSERT INTO order_items 
VALUES (last_insert_id(), 1, 2, 3);

COMMIT;

         我们执行的每一个语句,都会被 MySQL 包装成事务并在没有错误的前提下自动提交,这个过程由一个叫做 autocommit 的系统变量控制,默认开启,当事务只有一个语句时,可以不加 START TRANSACTION + COMMIT 。

SHOW VARIABLES LIKE 'autocommit';

最后

以上就是朴素薯片为你收集整理的MySQL触发器、事件、事务触发器事件事务的全部内容,希望文章能够帮你解决MySQL触发器、事件、事务触发器事件事务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部