【发布时间】:2013-08-12 16:05:23
【问题描述】:
根据我之前的帖子发现 here 当第一个表的状态发生变化时,我能够将值插入到第二个表中,但是它不断添加,我需要检查 submit_id 是否已经插入到第二个表中表然后更新字段而不插入它增益,我将如何在触发器执行之前进行检查? 因为 new.status 和 old.status 指的是正在编辑的行而不是它正在插入的表上的行,我如何比较它并插入或更新,如果它已经存在, 谢谢
【问题讨论】:
根据我之前的帖子发现 here 当第一个表的状态发生变化时,我能够将值插入到第二个表中,但是它不断添加,我需要检查 submit_id 是否已经插入到第二个表中表然后更新字段而不插入它增益,我将如何在触发器执行之前进行检查? 因为 new.status 和 old.status 指的是正在编辑的行而不是它正在插入的表上的行,我如何比较它并插入或更新,如果它已经存在, 谢谢
【问题讨论】:
您可以为此使用INSERT INTO ... ON DUPLICATE KEY UPDATE 语法
如果要让它正常工作,您必须在第二个表中的 submitId 列上有一个 UNIQUE 约束(我们称之为 students)。
ALTER TABLE students ADD UNIQUE (submitId);
现在是触发器的改进版本
DELIMITER $$
CREATE TRIGGER tg_au_submissions
AFTER UPDATE ON submissions
FOR EACH ROW
BEGIN
IF NEW.status = 1 THEN
INSERT INTO students (submitId, studentName, submitDate, contacts, email)
VALUES (NEW.submitId, NEW.studentName, NEW.submitDate, NEW.contacts, NEW.email)
ON DUPLICATE KEY UPDATE
studentName = VALUES(studentName),
submitDate = VALUES(submitDate),
contacts = VALUES(contacts),
email = VALUES(email);
END IF;
END$$
DELIMITER ;
这里是SQLFiddle演示