


























讲触发器和事件,数据库的自动化神器,表改动或定时任务都能搞定。跟着注释走,边看边整。
学习内容
示例代码与讲解
1. 创建触发器
DELIMITER $$
CREATE TRIGGER payments_after_insert
AFTER INSERT ON payments
FOR EACH ROW
BEGIN
UPDATE invoices
SET payment_total = payment_total + NEW.amount
WHERE invoice_id = NEW.invoice_id;
END $$
DELIMITER ;
INSERT INTO payments
VALUES (DEFAULT, 5, 3, '2019-01-01', 888, 1);
2. 查看与删除触发器
SHOW TRIGGERS;
SHOW TRIGGERS LIKE 'payments%';
DROP TRIGGER IF EXISTS payments_after_insert;
3. 触发器审计
DELIMITER $$
CREATE TRIGGER payments_after_insert
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, 'insert', NOW());
END $$
DELIMITER ;
INSERT INTO payments
VALUES (DEFAULT, 5, 18, '2019-01-01', 888, 1);
4. 事件
SHOW VARIABLES LIKE 'event%';
SET GLOBAL event_scheduler = ON;
DELIMITER $$
CREATE EVENT yearly_delete_stale_audit_rows
ON SCHEDULE
EVERY 2 DAY STARTS '2025-04-19' ENDS '2028-08-01'
DO BEGIN
DELETE FROM payments_audit
WHERE action_date < NOW() - INTERVAL 1 YEAR;
END $$
DELIMITER ;
SHOW EVENTS;
SHOW EVENTS LIKE 'yearly%';
DROP EVENT yearly_delete_stale_audit_rows;
作业
1. 删除触发器
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 $$
DELIMITER ;
DELETE FROM payments
WHERE payment_id = 9;
总结
讲了触发器,自动处理表改动,比如同步 invoices 或记日志到 payments_audit。还搞了事件,定时清老V3 删旧数据。用的 sql_invoicing 数据库。接下来看事务和索引。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。