1.什么是触发器
触发器(trigger)是一种数据库对象,可以看作由事件来触发的特殊存储过程。当一个特定的事件发生时,会自动执行在数据库表上的某些操作,比如当对一个表进行操作(insert,delete, update)时就会激活它执行,使得数据库其他数据发生变化。
触发器可以提高性能,这是其主要的优势,因为他是预编译的,而且省掉了和数据库建立连接和通讯的成本,因为触发器是一种特殊的存储过程,因此触发器开发相比程序开发更加灵活,简单。
1.1.查看 Oracle 数据库中已经定义的触发
SQL> SELECT * FROM USER_TRIGGERS;
1.2.查看触发器的详细定义
SQL> SELECT TEXT
2 FROM USER_SOURCE
3 WHERE TYPE = 'TRIGGER'
4 AND NAME = 'SYSCONFIG_INSERT_TRIGGER'
5 ;
TEXT
--------------------------------------------------------------------------------
TRIGGER "HBSMS20180522"."SYSCONFIG_INSERT_TRIGGER"
Before insert on sysconfigen
For each row
declare
Begin
:NEW.createdt := sysdate;
End;
2.为什么不建议使用触发器
任何技术都是有利有弊,综合比较,我认为使用触发器要看适用的场景,对于一些小项目来说,使用触发器可以很快实现一些需求,减少开发成本。但是对于大多数项目来说, 我并不建议使用触发器
2.1.隐藏问题
对于开发人员来说,最好的设计文档就是程序代码, 读代码也是开发人员了解软件系统的最直接方式, 当程序代码无法告知开发人员系统正在发生哪些事情时,开发人员就很难通过问题现象定位问题点
2.2.不易维护
从开发人员角度分析:使用触发器势必将业务逻辑分散,如果业务逻辑一部分在程序代码,一部分在数据库中。增加了开发管理的难度。当开发人员多次变更后,开发维护都可能上升为灾难,
从数据库管理员角度分析: 运维升级的人员如果没有全面了解相关触发器,可能会出现运维障碍。当数据库需要迁移或者割接时会十分困难
文章总结
大型、高并发的应用,数据库越简单约好。业务功能都建议使用程序替代数据库触发器,让系统功能更加明确