mysql数据库之触发器
创始人
2024-05-30 18:30:03
0

触发器是与表有关的数据库对象,指在insert、update、delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别名old和new来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。

触发器类型new和old
insert触发器new表示将要或者已经新增的数据
update触发器old表示修改之前的数据,new表示将要或已经修改后的数据
delete触发器old表示将要或者已经删除的数据

一、语法。

1、创建。

create trigger trigger_name
before/after insert/update/delete
on tbl_name for each row #行级触发器
begintrigger_stmt;
end;

2、查看。

show triggers;

3、删除。

drop trigger [schema_name.]trigger_name;#如果没有指定数据库名字schema_name,默认为当前数据库

二、案例一。

通过触发器记录tb_user表的数据变更日子,将变更日志插入到日志表user_logs中,包含增加、修改、删除;

1、创建表user_logs

2、定义插入数据表的触发器

create trigger tb_user_insert_trigger
after insert on tb_user for each row
begininsert into user_logs(id,operation,operate_time,operate_id,operate_params) values(null,'insert',now(),new.id,concat('插入的数据为:id=',new.id,',name=',new.name,',phone=',new.phone,',email=',new.email,',profession=',new profession));
end;

3、查看触发器

show triggers;

4、删除指定的触发器

drop trigger tb_user_insert_trigger;

5、插入数据到tb_user表中

 insert into user_logs(id,name,phone,email,profession,age,gender,status,createtime) values(25,'二皇子','18803031212','erhuangzi@163.com','软件工程',23,'1','1',now());

6、mysql数据库查看显示插入记录。

7、修改数据触发器

create trigger tb_user_update_trigger
after update on tb_user for each row
begininsert into user_logs(id,operation,operate_time,operate_id,operate_params) values(null,'update',now(),new.id,
concat('更新之前的数据:id=',old.id,',name=',old.name,',phone=',old.phone,',email=',old.email,',profession=',old profession,'更新之后的数据:id=',new.id,',name=',new.name,',phone=',new.phone,',email=',new.email,',profession=',new profession));
end;show triggers;

8、把id为23的age更改为32,把这条数据的专业改为会计

update tb_user set age = 32 where id = 23;
update tb_user set profession = '会计' where id = 23;
#把id小于等于5的专业改为会计,触发器质性5次,因为是行级触发器
update tb_user set profession = '会计' where id <= 5;

9、删除数据的触发器

create trigger tb_user_delete_trigger
after delete on tb_user for each row
begindelete into user_logs(id,operation,operate_time,operate_id,operate_params) values(null,'delete',now(),old.id,
concat('删除之前的数据:id=',old.id,',name=',old.name,',phone=',old.phone,',email=',old.email,',profession=',old profession));
end;show triggers;

10、删除id等于25的记录。

delete from tb_user where id = 25;

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...