-- 第十章 触发器
-- delimiter $$
-- create trigger payments_after_insert -- 表名_after/before_insert/delete/update
-- after insert on payments -- insert/delete/update
-- for each row -- 每行都会触发
-- -- 可以修改任何表中的数据,除了这个触发器所在表
-- begin
-- -- 触发的主体部分
-- update invoices
-- set payment_total = payment_total + new.amount-- 获取新的付款值-- old 返回更新前的行以及对应的数值
-- where invoice_id = new.invoice_id;
-- end $$
-- delimiter ;
-- insert into payments
-- values(default,5,3,'2019-01-01',10,1) -- 更新为10
-- 习题
-- 记录被删除的数据
-- delimiter $$
-- drop trigger if exists payments_after_insert -- 可以查看到历史修改记录 与创建放在同一个表中
-- 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 -- 在payments表里找最新的
-- show triggers -- 查看所有触发器
-- show triggers like 'payments%' -- 返回名称中是payments开头的触发器
-- 使用触发器进行审计
-- 创建新表
-- USE sql_invoicing;
-- CREATE TABLE payments_audit
-- (
-- client_id INT NOT NULL,
-- date DATE NOT NULL,
-- amount DECIMAL(9, 2) NOT NULL,
-- action_type VARCHAR(50) NOT NULL,
-- action_date DATETIME NOT NULL
-- )
-- 插入
-- delimiter $$
-- drop trigger if exists payments_after_insert;
-- 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 ;
-- 删除
-- 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 payments_audit
-- values (old.client_id,old.date,old.amount,'delete',now());
-- end $$
-- delimiter ;
-- 操作
-- insert into payments
-- values(default,5,3,'2019-01-01',10,1) -- 在payments_audit中出现新的记录
-- delete from payments
-- where payment_id = 10 -- 在payments_audit中出现新的记录
-- 事件
-- 根据计划执行
-- show variables like 'event%'; -- 查看以event开头的变量
-- set global event_scheduler = on -- on开 off关
-- delimiter $$
-- create event yearly_delete_stale_audit_rows
-- on schedule -- 事件计划
-- -- at '2019-05-01' -- at 执行一次
-- every 1 year starts '2019-01-01' ends '2029-01-01' -- 1 hour . 2 day . 1 year 定期执行
-- do begin。 -- 这个事件触发时执行的语句
-- delete from payments_audit
-- where action_date < now() - interval 1 year; -- 删除所有超过一年的审计记录
-- -- datesub(now(),interval 1 year)
-- end $$
-- delimiter ;
-- 查看删除和更改事件
-- show events like 'yearly%';
-- drop event if exists yearly_delete_stale_audit_rows; -- 删除事件
-- alter event yearly_delete_stale_audit_rows enable -- 或disable禁用 -- 更改事件,代替create
mysql day9 第十章 事件
最新推荐文章于 2024-07-13 20:12:32 发布