数据库--触发器
sql
·
触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL集合。
语法
eg:
CREATE TABLE `user_logs` (
`id` int NOT NULL AUTO_INCREMENT,
`operation` varchar(255) not NULL comment '操作类型, insert/update/delete',
`operation_time` datetime not NULL comment '操作时间',
`operation_id` int(11) not NULL comment '操作的ID',
`operation_params` varchar(500) COMMENT '操作参数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3;
插入数据触发器
-- 插入数据触发器
create trigger tb_user_unsert_trigger
after insert on t_test for each row
begin
insert into user_logs(id,operation,operation_time,operation_id,operation_params) VALUES
(null,'insert',now(),new.id,concat('插入的数据内容为:id=',new.id,',name=',new.name,',no=',new.no));
end;
-- 查看当前数据库触发器
show triggers;
-- 删除
drop trigger tb_user_unsert_trigger;
--插入数据到t_test表
insert into t_test(id,name,tutor_info_picture,no)
VALUES (5,'小米','图',5);
注意:这里拿新添加的主键id,使用new关键字,获取当前时间使用函数now()
修改数据触发器
-- 修改数据触发器
create trigger tb_user_update_trigger
after update on t_test for each row
begin
insert into user_logs(id,operation,operation_time,operation_id,operation_params) VALUES
(null,'update',now(),new.id,concat('更新之前的数据内容为:id=',old.id,',name=',old.name,',no=',old.no,
' | 更新之后的数据内容为:id=',new.id,',name=',new.name,',no=',new.no));
end;
update t_test set name = '小小' WHERE id = 4;
注意:old为更新前的数据,new为更新后的数据,or each row表示每插一行就记录
删除数据触发器
-- 修改数据触发器
create trigger tb_user_delete_trigger
after delete on t_test for each row
begin
insert into user_logs(id,operation,operation_time,operation_id,operation_params) VALUES
(null,'delete',now(),old.id,concat('删除之前的数据内容为:id=',old.id,',name=',old.name,',no=',old.no));
end;
show triggers;
delete from t_test WHERE id = 2;
更多推荐
已为社区贡献1条内容
所有评论(0)