gpt4 book ai didi

mysql - 更新后用 2 个表触发

转载 作者:行者123 更新时间:2023-11-29 06:21:55 25 4
gpt4 key购买 nike

我有一个具有以下结构的“用法”表:

Job | Start Time | End Time | Session

我还有另一个具有以下结构的表“ session ”来跟踪 session :

Session Label | Start Time | End Time

我想要一个触发器,当第一个表中有条目时,触发器将检查其他表的开始时间和结束时间。如果已经存在标签,则需要使用 session 标签更新第一个表的 session 列,否则应将新条目添加到第二个表并将相应的标签输入到第二个表的 session 列中.我以前从未使用过 SQL 触发器,也不知道如何实现它。

我试过:

CREATE TRIGGER test AFTER INSERT ON `usage`
FOR EACH ROW
WHEN (SELECT RIGHT(`usage`.starttime,5) != SELECT RIGHT(`sessions`.starttime,5))
BEGIN
SET `usage`.sessionlabel = `A`
END;

逻辑:

for(newrecordinusagetable)
{
//check if same starttime exists in any record of session table
if(true)
{
//do nothing
}
else
{
//add the new starttime to the session table
}

PS:不要在意结束时间或标签。

最佳答案

这是基于所提供的有限信息的尝试:

DELIMITER $$

CREATE TRIGGER usage_session_trigger
AFTER INSERT ON `usage`
FOR EACH ROW
BEGIN
-- Count sessions with same start time
DECLARE session_count INT;
SET session_count = (SELECT COUNT(*)
FROM sessions
WHERE RIGHT(starttime, 5) = RIGHT(NEW.starttime, 5));

-- If none found, insert one.
IF (session_count = 0) THEN
INSERT INTO sessions (sessionlabel, starttime, endtime)
VALUES (NEW.`session`, NEW.starttime, NEW.endtime);
END IF;
END;
$$

DELIMITER ;

注意事项

  1. 我假设您有充分的理由比较示例中时间的最后 5 个字符,所以在这里重复了一遍。 (虽然猜不出为什么是 5!)
  2. 可能还需要考虑更新(+ 可能删除?)是否需要类似的触发器
  3. 我不会评论您要求做的是否是正确的方法 - 只是试图回答问题。

关于mysql - 更新后用 2 个表触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32933878/

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