看了很多观点,大家对数据库的触发器基本上是一致的不推荐使用。
对于触发器的弊端大体梳理了一下:
1. 触发器不可见,不容易追踪,难以维护,隐式调用不易于排查依赖,有悖编码规范。
2. 触发器移植性不好
3. 触发器增加数据库压力,高并发应用不要使用。
一跟二都很容易理解,但是第三点,我有一些疑虑。既然都是对数据库的一组操作,为什么说触发器会增加数据库的压力?影响效率?
触发器和事务都是对数据库的一组操作,事务还有程序的远程连接调用的io消耗,触发器是在数据库层面的执行和调用,感觉应该比事务执行的效率更高,为什么更推荐使用事务呢?
数据库是用来存数据,取数据的,不是用来帮你做计算的
触发器在数据库上面运行会消耗数据库的计算资源,如果这部分资源用来提供查询服务,是不是又可以多服务几个客户端,QPS是不是快一点?
高并发的项目中,对数据库都是能不访问则不访问,触发器能做的,应用程序也能做,而且做的更好,还能横向扩展
事务主要时为了解决数据一致性问题,这方面跟触发器没有可比性