如果子表更新,则更新父表上的时间戳

时间:2014-07-03 16:16:24

标签: php mysql sql

让我们说我的对开页表(id,name,lastModified)

和子表文章(id,name,folio_id,lastModified)。

如果子表更新,我想更新父表的lastModified。我怎样才能自动完成它?

P.S。 lastModified是一个时间戳,在发生更改时会自动更新。

2 个答案:

答案 0 :(得分:0)

如果您希望父级的lastModified始终是所有孩子的lastModified的最大值,我建议明确地显示父级的 NOT EVEN STORING ,而是通过动态查询子表来获取值。 是的,每次拥有准确和规范化数据(并且没有性能查杀触发器)的优势超过了每次查询子表的缺点(假设您有父/的外键/孩子,指数等。)。

例如,如果您这样做,表达父表的另一种方法是:

create view vFolio as
select id, name, lastModified=(
                     select max(a.lastModified) 
                     from article a where a.folio_id = f.id
                 )
from folio f

答案 1 :(得分:0)

我个人会在我的应用程序代码中处理这个问题。

但是你可以使用触发器来完成这项工作,只需在执行记录更新时创建一个触发器;

CREATE TRIGGER [dbo].[tr_childupdate]
   ON [dbo].[childtable]
   AFTER UPDATE
AS BEGIN
       ..... code to update parent table..
       WHERE dbo.folio.id = updated.folio_id

END