SQL触发器

简介:

触发器是与表有关的数据库对象,在 insert/update/delete 之前或者之后,触发并执行触发器中定义的SQL语句集合。

触发器适合在数据库端确保数据的完整性日志记录数据校验 现在的触发器还只支持行级触发,不支持语句触发。

创建查看删除:

-- 创建 --
CREATE TRIGGER [trigger_name]
BEFORE/AFTER INSERT/UPDATE/DELETE
ON [table_name] FOR EACH ROW -- 指定表并加入触发器
BEGIN
    ...
END;
-- 查看 --
SHOW TRIGGERS;
-- 删除 不指定数据库.名称,默认删除当前数据库下的 --
DROP TRIGGER [database_name.]trigger_name

示例:日志表

为hso表建立日志表hso_logs,并通过触发器记录该表的数据变更日志。

-- 建表语句 --
CREATE TABLE hso_logs(
    id int(11) not null auto_increment,
    operation varchar(20) not null comment '操作类型',
    operate_time datetime not null comment '操作时间',
    operate_id int(11) not null comment '操作的id',
    operate_params varchar(500) comment '操作参数',
    primary key(id)
)engine=innodb default charset=utf8;

-- insert触发器 --
create trigger hso_insert_trigger
    after insert on hso for each row
begin
    insert into hso_logs(id,
                         operation,
                         operate_time,
                         operate_id,
                         operate_params) 
                       values(null,'insert',now(),new.id,concat(
    '插入的数据内容为id=',new.id,',var1=',new.var1
    ))     
end;


-- update触发器 --
create trigger hso_insert_trigger
    after update on hso for each row
begin
    insert into hso_logs(id,
                         operation,
                         operate_time,
                         operate_id,
                         operate_params) 
                       values(null,'update',now(),new.id,concat(
                           '更新之前的数据:id=',old.id,',var1=',old.var1,
    ' | 更新的数据内容为id=',new.id,',var1=',new.var1
    ))
end;

-- delete触发器 --
create trigger hso_insert_trigger
    after delete on hso for each row
begin
    insert into hso_logs(id,
                         operation,
                         operate_time,
                         operate_id,
                         operate_params) 
                       values(null,'delete',now(),old.id,concat(
    '删除的数据内容为id=',new.id,',var1=',new.var1
    ))
    -- 删除前的ID --
end;
上一篇
下一篇