gpt4 book ai didi

MySQL 的更新级联未更新父 FK

转载 作者:行者123 更新时间:2023-11-30 00:56:19 29 4
gpt4 key购买 nike

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

详细信息:我有一张 table - 群组

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,

当我更新用户表时,我希望我的相关组行使用新的时间戳进行更新。

我认为它应该可以工作,不幸的是它没有工作

有什么想法/我做错了什么吗?

谢谢,奥姆里

最佳答案

您正在尝试以两种不同的方式使用 Groups 表中的 timeUpdated 列。这可能并不是您真正想要做的。

相反,让Groups表保留对Groups表的更改的更新时间戳,并让Users表记录最新的更新Users 表。

当您在 Groups 表中查找成员资格信息最后一次更改的时间时,您可以像这样查询:

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;

如果您需要大量用户和组,我建议对 Users 表中的 groupid 列建立索引。

关于MySQL 的更新级联未更新父 FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521788/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com