【发布时间】:2018-07-04 02:31:45
【问题描述】:
在触发器中,我需要知道正在更新的行是否是“最后”行。 我需要知道这一点,因为只有当它是“最后”行时,我才需要更新另一个表。
我知道我可以使用带有 AFTER STATEMENT 的 COMPOUND TRIGGER 来确定记录更新是否是“最后一次”,但我想知道是否有更简单的方法怎么办?
前: 表人:
+------+-----------+
| id | name |
+------+-----------+
| 1 | Bob |
| 2 | Kenny |
+------+-----------+
表relation_person_event:
+------+-----------+------------+------------+
| id | id_Person | id_event | date |
+------+-----------+------------+------------+
| 1 | 1 | 2000 | 2018-01-01 |
| 2 | 1 | 2195 | 2017-11-11 |
+------+-----------+------------+------------+
触发器在 relation_person_event 表上。 我需要更新一个人与事件之间的关系不能超过 1 个的旧表。 最后一条记录由列日期确定。
编辑 旧表:
+------+-----------+------------+------------+
| id | id_Person | id_event | date |
+------+-----------+------------+------------+
| 1 | 1 | 2000 | |
| 2 | 2 | 3589 | |
+------+-----------+------------+------------+
所有这些表只是为了给出一个如何构建数据库的简单示例。我想将新表中的所有信息推送到旧表中。
有没有办法确定记录更新是否是触发器中的“最后一个”记录,没有 COMPOUND TRIGGER 和 AFTER STATEMENT?
【问题讨论】:
-
为什么需要触发器?在应用程序逻辑中处理该更新。另外,当你说“我需要更新一个旧表”时,那个表的定义是什么,你想更新哪一列?
-
@KaushikNayak 旧桌子肯定会在几年内被销毁。它未映射到应用程序中。由于它会被销毁,因此销毁触发器比修改应用程序更容易。
-
好吧,在这种情况下更改应用程序将是为它编写一个单独的程序,(或者甚至更好地每天/每周运行它,或者如果可能的话,任何适合您的计划工作),简单删除旧表后对其进行评论。只要它正在更新,触发器就意味着主表上的不必要负载。
-
我明白你的意思,但更改应用程序意味着主要生产毕业(在我的工作地点)。触发器的破坏奇怪地不被视为毕业。我也想过安排一份工作,但它不适合我的需要。