更新级联上的MySQL不会更新父FK

时间:2013-12-11 14:29:31

标签: mysql sql foreign-keys foreign-key-relationship

我的主要目标是获取所有数据的最后更新时间。

详细说明: 我有一张桌子 - 小组

groupId
groupName
timeUpdated (timestamp - on update)

另一个表 - 用户

userId
timeUpdated (timestamp - on update)
groupId (FK to Groups)
ADD CONSTRAINT `users_ibfk_3` FOREIGN KEY (`groupId`) REFERENCES `groups` (`groupId`) ON DELETE CASCADE ON UPDATE CASCADE,

当我更新users表时,我希望我的相对组行能够使用新的时间戳更新。

我认为它应该有用,不幸的是它无法运作

任何想法/我做错了什么?

谢谢, Omri

1 个答案:

答案 0 :(得分:0)

您试图以两种不同的方式使用timeUpdated表格中的Groups列。这可能不是你想要做的。

相反,让Groups表保留更新Groups表的更新时间戳,以及记录Users表的最新更新的Users表。 / p>

如果您要查找“组”表中最后一次更改任何会员信息,您可以这样查询:

select 
    g.groupid,
    g.groupname,
    g.timeupdated as grouplastchanged,
    max(u.timeupdated) as lastuserchanged 
from 
    groups as g
inner join
    users as u
    on u.groupId = g.groupId
group by
    g.groupid,
    g.groupname,
    g.timeupdated;

或者,如果你想变得非常喜欢,你可以这样做:

select 
    g.groupid,
    g.groupname,
    greatest(g.timeupdated, max(u.timeupdated)) as lastmodified
from 
    groups as g
inner join
    users as u
    on u.groupId = g.groupId
group by
    g.groupid,
    g.groupname;

如果您期望有大量用户和群组,我建议您为groupid表格中的Users列编制索引。