网站首页 > 技术文章 正文
触发器是MySQL的数据库对象之一,该对象与编程语言中的函数非常相似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。
那么为什么要使用数据库对象触发器呢?在具体开发项目时,经常会遇到如下实例:
A:在学生表中拥有字段学生名字,字段学生总数,每当添加一条关于学生记录时,学生的总数就必须同时改变。
B:在顾客信息表中拥有字段顾客名字,字段顾客的电话和字段顾客的地址缩写,每当添加一条关于顾客记录时,都需要检查电话号码格式是否正确,顾客地址缩写是否正确。
上述实例虽然所需要实现的业务逻辑不同,但是它们也有共同之处,即都需要在表发生更改时,自动进行一些处理。这时就可以使用触发器处理数据库对象,例如,对于第一个实例,可以创建一个触发器,每次添加一条学生记录时,就执行一次学生总数的操作,这样就可以保证每次添加一条学生记录后,学生总数与学生记录数一致。查看帮助文档,可以发现MySQL软件在触发如下语句时,就会自动执行所设置的操作。
DELETE语句
INSERT语句
UPDATE语句
其他SQL语句不会激活触发器。在具体的应用中,之所以会经常使用触发器数据库对象,是由于该对象能够加强数据库表中数据的完整性约束和业务规则等。
触发器的创建包括创建触发器、查看触发器以及删除触发器。创建触发器可分为“一条执行语句的触发器”和“多条执行语句的触发器”。
创建有一条执行语句的触发器,其语法形式如下:
Create trigger trigger_name before|after trigger_event on table for each row trigger_stmt
在上述语句中,trigger_name 参数表示所要创建的触发器的名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。Before和after 参数指定了触发器的执行时间,其中前者是指触发器时间之前执行触发器语句,后者是指触发器事件之后执行触发器语句。Trigger_event 参数表示触发事件,即触发执行条件,包含DELETE语句、INSERT语句、UPDATE语句。Table_name表示触发器事件操作表的名字。For each row 参数表示任何一条记录上的操作满足触发器事件都会触发该触发器。Trigger_stmt参数表示激活触发器后被执行的语句。
创建有多条执行语句的触发器,其语法形式如下:
Create trigger trigger_name before|after trigger_event on table for each row
Begin
trigger_stmt
end
在MySQL软件中,一般情况下用“;”符号作为语句的结束符号,可是在创建触发器时需要用到“;”符号作为trigger_stmt中的分隔符号。为了解决该问题,可以使用关键字delimiter语句,例如”delimiter $”,可以用来实现将结束符号设置成“$”。
例如如下的执行语句:
Delimiter $
Create trigger trigger_diarytime
After insert
On table_tept for each row
Begin
Insert into table_diary values(null,’table_dept’,now());
Insert into table_diary values(null,’table_dept’,now());
End
$
Delimiter ;
查看触发器执行语句:
Show trigger \G
删除触发器执行语句:
Drop trigger trigger_name
关于触发器就讲到这里,想了解更多知识内容可加群588678536,群文件可下载更多文档。
猜你喜欢
- 2024-09-23 (二)SQL数据模式、表、索引的建立与删除
- 2024-09-23 当我们输入一条SQL查询语句时,发生了什么?
- 2024-09-23 超详细!SQL语法速成就靠这篇了!(下)
- 2024-09-23 sql语句(sql语句增删改查)
- 2024-09-23 数据库触发器(数据库触发器的创建和使用)
- 2024-09-23 SQL创建触发器(sql创建触发器禁止修改成绩)
- 2024-09-23 MySQL_08_触发器(mysql触发器的使用及语法)
- 2024-09-23 被低估的SQL(被低估的中国半导体龙头)
- 2024-09-23 都2021年了不会还有人不会用SQL吧
- 2024-09-23 Navicat工具中“清空表”与“截断表”区别,望文生义惹的祸
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 447℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)