我有一张表'用法'具有以下结构:
Job | Start Time | End Time | Session
我还有另一张桌子'会议'使用以下结构来跟踪会话:
Session Label | Start Time | End Time
我希望有一个触发器,当第一个表中有一个条目时,触发器将检查其他表的开始时间和结束时间。如果已存在标签,则需要使用会话标签更新第一个表的会话列,否则应将新条目添加到第二个表中,并将相应的标签输入到第二个表的会话列中。我之前从未使用过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:不要担心结束时间或标签。
答案 0 :(得分:2)
以下是基于所提供的有限信息的尝试:
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 :(得分:0)
从更好的解决方案角度来看,最好在将数据插入使用表时在应用程序逻辑中实现此功能,而不是创建触发器来实现此目的。为了演示你的sceanrio,我使用了一个存储过程插入到使用表中。你可以相应地修改它。
boolean contains(String str){
return Sets.newHashSet(YourEnum.values()).contains(str);
}