假设我有一个数据库表,其中包含上次更新或插入的时间列.哪个更好:
>触发更新字段.
>让正在执行插入/更新的程序设置该字段.
第一个选项似乎是最简单的,因为我甚至不需要重新编译它,但这并不是一个大问题.除此之外,我很难想出任何理由去做另一个.有什么建议?
解决方法
第一个选项可以更强大,因为数据库将维护该字段.这带来了使用触发器的可能开销.
如果将来有其他应用程序可以通过自己的接口写入此表,我会使用触发器,这样您就不会在其他任何地方重复该逻辑.
如果您的应用程序非常多,或者任何其他应用程序将通过相同的数据层访问数据库,那么我将避免触发器可以诱导并将逻辑直接放入数据层(sql,ORM,存储过程等等)的噩梦. ).
当然,在任何一种情况下,您都必须确保您的时间源(您的应用程序,用户的PC,sql服务器)是准确的.
关于为什么我不喜欢触发器:
也许我把他们称为噩梦是轻率的.像其他一切一样,它们适合适度.如果你将它们用于非常简单的事情,我可以加入.
当触发器代码变得复杂(并且昂贵)时触发器开始引起许多问题.它们是您执行的每个插入/更新/删除查询的隐藏税(取决于触发器的类型).如果该税是可以接受的,那么它们可以成为工作的正确工具.