这是我的table“雇员”:
+----------------+--------------+------+-----+-------------------+-------+
| 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.
我也不知道我应该在更新后还是更新前使用。
抱歉,如果这是一个基本的错误,但我不知道如何解决这个问题。谢谢您。
1条答案
按热度按时间mzillmmw1#
对于此任务,您可以更改
CREATE TABLE
语句,并定义要随任何其他列的每次“更新”自动更新的列:(注意
ON UPDATE CURRENT_TIMESTAMP
零件)当然,您也可以更改现有表:
除此之外,你的扳机看起来还不错。
请确保在创建触发器之前
drop trigger if exists
声明。否则可能存在触发器的“以前”版本,因此更新的触发器没有按预期创建。