如果条件成立则触发

时间:2018-09-13 01:53:20

标签: mysql triggers

我是MySQL触发器的新手。我想触发一个触发,在从我的emp_audit表进行更新之前,将首先检查我的employee表中的empno是否已经存在。如果存在,则执行更新,否则不执行任何操作。

我遇到以下错误:

  

错误1064

代码是:

DELIMITER $$

CREATE TRIGGER before_emp_audit_update
BEFORE UPDATE ON emp_audit
FOR EACH ROW BEGIN 

  IF (SELECT COUNT(*) FROM employees WHERE empno = NEW.empno) = 1
  THEN
  UPDATE INTO emp_audit
  SET ACTION = 'update',
  empno = NEW.empno,
  lastname = NEW.lastname,
  changedat = NOW();

  END IF;
END$$
DELIMITER;

2 个答案:

答案 0 :(得分:0)

请检查以下更新的查询是否有效。

DELIMITER $$

CREATE TRIGGER before_emp_audit_update
BEFORE UPDATE ON emp_audit
FOR EACH ROW BEGIN 

  IF (SELECT COUNT(*) FROM employees WHERE empno = NEW.empno) = 1
  THEN
  UPDATE INTO emp_audit
  SET ACTION = 'update',
  empno = NEW.empno,
  lastname = NEW.lastname,
  changedat = NOW()
  WHERE empno = NEW.empno;

  END IF;
END$$
DELIMITER;

我认为,您甚至可以从SET(更新)列表中删除empno,然后尝试以下查询,

DELIMITER $$

CREATE TRIGGER before_emp_audit_update
BEFORE UPDATE ON emp_audit
FOR EACH ROW BEGIN 

  IF (SELECT COUNT(*) FROM employees WHERE empno = NEW.empno) = 1
  THEN
  UPDATE INTO emp_audit
  SET ACTION = 'update',
  lastname = NEW.lastname,
  changedat = NOW()
  WHERE empno = NEW.empno;

  END IF;
END$$
DELIMITER;

答案 1 :(得分:0)

UPDATE语法不包含INTO关键字。