MySQL在';表';在相同的';表';

MySQL在';表';在相同的';表';,mysql,database,triggers,Mysql,Database,Triggers,这是我的“员工”表: +----------------+--------------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+-------------------+-------+ | employeeNumb

这是我的“员工”表:

+----------------+--------------+------+-----+-------------------+-------+
| Field          | Type         | Null | Key | Default           | Extra |
+----------------+--------------+------+-----+-------------------+-------+
| employeeNumber | int(11)      | NO   | PRI | NULL              |       |
| lastName       | varchar(50)  | NO   |     | NULL              |       |
| firstName      | varchar(50)  | NO   |     | NULL              |       |
| extension      | varchar(10)  | NO   |     | NULL              |       |
| email          | varchar(100) | NO   |     | NULL              |       |
| officeCode     | varchar(10)  | NO   |     | NULL              |       |
| reportsTo      | int(11)      | YES  |     | NULL              |       |
| jobTitle       | varchar(50)  | NO   |     | NULL              |       |
| age            | int(11)      | YES  |     | NULL              |       |
| lastUpdate     | timestamp    | NO   |     | CURRENT_TIMESTAMP |       |
+----------------+--------------+------+-----+-------------------+-------+
我开始学习MySQL中的触发器。 这样做的目的是,当我更新员工时,我希望在lastUpdate中设置当天的时间 所以我试着做一个简单的:

DELIMITER $$
CREATE TRIGGER lastUpdate_employee
BEFORE UPDATE
   ON employees FOR EACH ROW
BEGIN
    SET new.lastUpdate = CURRENT_TIMESTAMP;
END; 
$$
DELIMITER ;
我可以创建无错误的触发器,但当我尝试更新员工时,它会给我一个错误:

ERROR 1442 (HY000): Can't update table 'employees' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我也不知道我应该在更新后还是更新前使用

抱歉,如果这是一个基本错误,但我不知道如何解决这个问题。
谢谢。

对于此任务,您也可以更改
创建表
语句,并定义要随任何其他列的每次“更新”自动更新的列:

(注意更新当前时间戳时的
部分)

当然,您也可以更改现有表:

ALTER TABLE test
  MODIFY COLUMN lastChange
  TIMESTAMP
  NOT NULL 
  DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP;

除此之外,你的扳机对我来说还不错


请确保在创建触发器之前,您添加了一个
下拉触发器(如果存在)
语句。否则您的触发器可能存在“以前”版本,因此更新后的触发器没有按预期创建。

也许您会发现这很有用:
ALTER TABLE test
  MODIFY COLUMN lastChange
  TIMESTAMP
  NOT NULL 
  DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP;