文章目录
- TRIGGER
-
- 简介
- 创建Trigger
- 显示Trigger
- 删除Trigger
- log changes
- EVENT
-
- 查询event
- 设置event开闭
- 创建一个event
- 显示event
- 删除事件
- 使能和失能事件
TRIGGER
简介
trigger(触发器)是在对一个表进行修改操作之前(或者之后)自动执行的一块sql语言块,对除本身的其它表进行操作的一种方法
创建Trigger
- 当对payments进行插入操作后自动计算invoice的payment_total。
DELIMITER $$
drop trigger if exists payments_after_insert;
create trigger payments_after_insert-- afer可以替换成before,insert也可以替换成update,table可以为除它本身的所有表after insert on payments-- 对插入的每一行都执行操作for each row
beginupdate invoices-- new代表新插入的数据,可以用old代表原来的数据set payment_total = payment_total + new.amountwhere invoice_id = new.invoice_id;insert into payments_auditvalues(new.client_id,new.date,new.amount,'Insert',Now());
end $$
DELIMITER $$ ;
显示Trigger
- 显示所有的trigger
show trigger
- 显示单张表的trigger
show trigger like 'payments%'
删除Trigger
drop trigger if exists payments_after_insert;
log changes
可以利用trigger来记录更改的数据
创建一个表用于记录数据的变更
use sql_invoicing;
create table payments_audit
(client int not null,date date not null,amount decimal(9,2) not null,action_type varchar(50) not null,action_date datetime not null
)
- 修改之前的trigger
use sql_invoicing;
DELIMITER $$
drop trigger if exists payments_after_insert;
create trigger payments_after_insert-- afer可以替换成before,insert也可以替换成update,table可以为除它本身的所有表after insert on payments-- 对插入的每一行都执行操作for each row
beginupdate invoices-- new代表新插入的数据,可以用old代表原来的数据set payment_total = payment_total + new.amountwhere invoice_id = new.invoice_id;insert into payments_auditvalues(new.client_id,new.date,new.amount,'Insert',Now());
end $$
DELIMITER $$ ;
EVENT
event是用于在规定时刻做出操作的的代码块,比如删除,拷贝备份等操作,event在后台运行
查询event
show variables like 'event%'
设置event开闭
set globle event_scheduler = on //关闭为off
创建一个event
- 创建一个事件,每年都清除payments_audit去年的数据
delimiter $$
create event yearly_delete_stale_audit_rows
on schedule
-- at '2019-05-01' 只执行一次every 1 year starts '2019-01-01' ends '2029-01-01'
do begindelete from payments_auditwhere action_date < now() - interval 1 year;
end $$
delimiter ;
显示event
show events;
//跟事件名
show event like 'yearly%'
删除事件
drop event if exists yearly_delete_stale_audit_rows
使能和失能事件
alter event yearly_delete_stale_audit_rows disable;
alter event yearly_delete_stale_audit_rows enable;