在触发器中如何将值插入另一个表但检查值是否已存在

时间:2013-08-11 03:27:37

标签: mysql sql triggers

基于我之前的帖子发现here我能够在第一个表上的状态发生变化时将值插入第二个表,但是它会不加区别地添加,我需要检查是否已经插入了submit_id第二个表然后更新字段而不是插入增益,在执行触发器之前我该如何检查? 因为new.status和old.status引用正在编辑的行而不是它所插入的表上的行,如何比较它并插入或更新(如果它已经存在), 感谢

1 个答案:

答案 0 :(得分:1)

您可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE语法

如果要让它正常工作,您必须在第二个表格的UNIQUE列上设置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 演示