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';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值