如何在插入 table 后立即通过触发器更新属性值?
How can I update the value of an attribute through trigger right after insertion into that table?
这是我的 table。
CREATE TABLE `employees` (
id INT(4) NOT NULL AUTO_INCREMENT,
employee_id VARCHAR(10) null,
employee_email VARCHAR(30) NOT NULL,
employee_first_name VARCHAR(30) NOT NULL,
employee_last_name VARCHAR(30) NOT NULL,
PRIMARY KEY (id),
UNIQUE (employee_id));
这是我正在使用的触发器。
delimiter $$
create trigger employee_id_update_trigger
after insert on employees
for each row
begin
update employees set new.employee_id= concat('ecl-emp-',id)
where id=LAST_INSERT_ID();
end$$
delimiter ;
这是我要插入的内容。
INSERT INTO `employees`
VALUES (1,null,'abc@gmail.com','ABC','DEF');
下面给出了我遇到的错误。
11:29:16 INSERT INTO `employees` VALUES (1,null,'abc@gmail.com','ABC','DEF') Error Code: 1442. Can't update table 'employees' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 1.282 sec
如果您只想更改 insert
之前的值,我认为您实际上不需要 运行 一个 update
语句。您应该可以使用 set
。即使它有效,如果同时发生大量插入,我不确定您使用 LAST_INSERT_ID
的尝试是否安全。
我认为你的语法应该是这样的:
CREATE TRIGGER employee_id_update_trigger BEFORE INSERT ON employees
FOR EACH ROW SET NEW.employee_id=concat('ecl-emp-',NEW.id);
或
delimiter $$
create trigger employee_id_update_trigger
before insert on employees
for each row
begin
SET NEW.employee_id=concat('ecl-emp-',NEW.id);
end$$
delimiter ;
有关更多示例,请参阅 the documentation。
这是我的 table。
CREATE TABLE `employees` (
id INT(4) NOT NULL AUTO_INCREMENT,
employee_id VARCHAR(10) null,
employee_email VARCHAR(30) NOT NULL,
employee_first_name VARCHAR(30) NOT NULL,
employee_last_name VARCHAR(30) NOT NULL,
PRIMARY KEY (id),
UNIQUE (employee_id));
这是我正在使用的触发器。
delimiter $$
create trigger employee_id_update_trigger
after insert on employees
for each row
begin
update employees set new.employee_id= concat('ecl-emp-',id)
where id=LAST_INSERT_ID();
end$$
delimiter ;
这是我要插入的内容。
INSERT INTO `employees`
VALUES (1,null,'abc@gmail.com','ABC','DEF');
下面给出了我遇到的错误。
11:29:16 INSERT INTO `employees` VALUES (1,null,'abc@gmail.com','ABC','DEF') Error Code: 1442. Can't update table 'employees' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 1.282 sec
如果您只想更改 insert
之前的值,我认为您实际上不需要 运行 一个 update
语句。您应该可以使用 set
。即使它有效,如果同时发生大量插入,我不确定您使用 LAST_INSERT_ID
的尝试是否安全。
我认为你的语法应该是这样的:
CREATE TRIGGER employee_id_update_trigger BEFORE INSERT ON employees
FOR EACH ROW SET NEW.employee_id=concat('ecl-emp-',NEW.id);
或
delimiter $$
create trigger employee_id_update_trigger
before insert on employees
for each row
begin
SET NEW.employee_id=concat('ecl-emp-',NEW.id);
end$$
delimiter ;
有关更多示例,请参阅 the documentation。