mysql触发器如何创建(MySQL 触发器的使用和理解)
mysql触发器如何创建
MySQL 触发器的使用和理解1.触发器是什么?
一类特殊的数据库程序,可以监视某种数据的操作(insert/update/delete),并触发相关的操作(insert/update/delete),保护数据的完整性。
个人理解就有点类似于java的观察者模式,一个对象变化,观察者也跟着做出响应。
mysql好像是从5.0以后开始支持触发器的。
2.创建触发器
创建触发器我将介绍两种方式:用语句创建,用navicat创建。
创建触发器的语法如下:
|
create trigger trigger_name trigger_time trigger_event on tb_name for each row trigger_stmt trigger_name:触发器的名称 tirgger_time:触发时机,为before或者 after trigger_event:触发事件,为 insert 、 delete 或者 update tb_name:表示建立触发器的表明,就是在哪张表上建立触发器 trigger_stmt:触发器的程序体,可以是一条sql语句或者是用 begin 和 end 包含的多条语句 所以可以说mysql创建以下六种触发器: before insert ,before delete ,before update after insert , after delete , after update |
其中,触发器名参数指要创建的触发器的名字
before和after参数指定了触发执行的时间,在事件之前或是之后
for each row表示任何一条记录上的操作满足触发事件都会触发该触发器
创建多个执行语句的触发器:
|
create trigger 触发器名 before| after 触发事件 on 表名 for each row begin 执行语句列表 end |
new和old的使用:
触发器类型 | new和old的使用 |
insert | new代表新增的数据 |
update | new代表更新后的数据,old代表更新前的数据 |
delete | old代表要删除的数据 |
某一个字段可以用new/lod.字段名
接下来我们创建2个表用来测试:
stu表:主表(被观察者)
|
drop table if exists `stu`; create table `stu` ( `id` int (11) not null auto_increment comment 'id' , ` name ` varchar (255) character set utf8mb4 collate utf8mb4_general_ci null default null comment '姓名' , `age` int (11) null default null comment '年龄' , `sort` int (11) null default null comment '排序字段' , primary key (`id`) using btree ) engine = innodb auto_increment = 18 character set = utf8mb4 collate = utf8mb4_general_ci row_format = dynamic ; |
stu_log表:触发器关联表(观察者)
|
drop table if exists `stu_log`; create table `stu_log` ( `id` int (11) unsigned not null auto_increment, ` name ` varchar (255) character set utf8mb4 collate utf8mb4_general_ci null default null , `create_time` datetime(0) null default null , primary key (`id`) using btree ) engine = innodb auto_increment = 7 character set = utf8mb4 collate = utf8mb4_general_ci row_format = dynamic ; |
现在我们假设有这样一个业务,在stu表新增和删除数据时,同步在stu_log中记录日志,记录name和时间。
如果不使用触发器,我们就需要编写代码来实现这个需求,但是触发器可以帮我们轻松的实现。
首先我们使用语句来创建一个insert触发器:
|
drop trigger if exists `insert_log`; delimiter ;; create trigger `add_log` after insert on `stu` for each row begin insert into stu_log( name ,create_time) values (new.` name `,now()); end ;; delimiter ; |
执行结果:
然后我们再用navicat创建一个delete触发器:
step1:右键stu表,选择设计表----触发器
step2:如图所示填选,选择删除前触发
step3:在下方定义框内写执行语句,如图 记得点保存!
语句:
|
begin insert into stu_log( name ,create_time) values (old.` name `,now()); end |
3.使用触发器
测试一下:新增一条数据
|
insert into stu ( name ,age) values ( '李白' ,36) |
查看stu表和stu_log表:
如图,触发器已经生效了!
测试删除一条数据
|
delete from stu where name = '李白' |
查看stu表和stu_log表:
如图,触发器已经生效了!
以上就是mysql 触发器的使用和理解的详细内容,更多关于mysql 触发器的资料请关注开心学习网其它相关文章!
原文链接:https://www.cnblogs.com/godjoker/p/14442831.html
- mysqldump 命令详解(mysqldump你可能不知道的参数)
- 阿里云mysql配置升级注意事项(详解如何在阿里云上安装mysql)
- mysql定时任务
- mysql中自增字段类型(MySQL数字类型自增的坑)
- mysql8.0.25安装教程(Mysql8.0.17安装教程推荐)
- mysql8.0安装版安装详细教程(mysql 8.0.24版本安装配置方法图文教程)
- mysql8.0.23的安装步骤(mysql 8.0.22 下载安装配置方法图文教程)
- mysql怎么和sqlyog连接(Mysql桌面工具之SQLyog资源及激活使用方法告别黑白命令行)
- 如何在cmd里开启mysql(Windows下通过cmd进入DOS窗口访问MySQL数据库)
- linuxmysql安装教程5.7.25学习(linux mysql5.5升级至mysql5.7的步骤与踩到的坑)
- mysql删除数据库的命令(MySQL 线上数据库清理数据的方法)
- MySQL主从状态检查的实现(MySQL主从状态检查的实现)
- idea向数据库中插入中文报错(Idea连接MySQL数据库出现中文乱码的问题)
- mysql 查询都是0的值(MySQL按小时查询数据,没有的补0)
- mysql模糊匹配语句(MySQL 数据库 like 语句通配符模糊查询小结)
- mysql表结构设计分享(MySql开发之自动同步表结构)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
热门推荐
- js如何生成随机数
- php添加数据到mysql数据库(PHP通过代码连接XAMPP数据库及MySQL数据库方法)
- mongodb distinct去重
- dedecms内容页模板调用不成功(织梦dedecms循环调用多级子栏目如二级栏目下三级栏目)
- openstack为什么要脚本搭建(基于CentOS的OpenStack环境部署详细教程OpenStack安装)
- Visual Studio中使用正则表达式替换
- css3导航条推荐(使用CSS3制作倾斜导航条和毛玻璃效果)
- react教程简介(react入门级详细笔记)
- 解忧大队es6扩展运算符(ES6扩展运算符的使用方法示例)
- wampserver怎么进后台(WampServer下使用多端口访问的技巧)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9