基于我上一篇文章发现,当第一个表上的状态发生变化时,这里 im能够将值插入到第二个表中,但是它一直不加区别地添加,我需要检查submit_id是否已经插入到第二个表中,然后更新字段而不是插入它增益,在执行触发器之前如何进行检查?由于new.status和old.status引用的是正在编辑的行,而不是要插入到表中的行,因此如何比较该行并插入或更新它是否已经存在,谢谢
发布于 2013-08-11 04:42:48
为此,可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE
语法。
如果要使其正常工作,第二个表中的submitId
列必须有一个submitId
约束(让我们称之为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演示
https://stackoverflow.com/questions/18168454
复制相似问题