MySQL触发器,插入之前:如果已存在则更新

时间:2016-04-12 18:40:45

标签: mysql triggers

我有一个应用程序,它无法更新行,只能插入它们,但如果某些内容已插入数据库并且它尝试插入一行,则会生成duplicate key error

我尝试为底层数据库表创建触发器,因此如果它尝试插入存在的行,则会更改为更新。 像这样:

CREATE DEFINER = CURRENT_USER TRIGGER `Test`.`Job_BEFORE_INSERT` BEFORE INSERT ON `Job` FOR EACH ROW
BEGIN
    INSERT INTO Job(id, createdAt, updatedAt, `name`, 
    version, ...) 
    VALUES(NEW.id, NEW.createdAt, NEW.updatedAt, NEW.name, 
    NEW.version, ...)
    ON DUPLICATE KEY UPDATE
    updatedAt=CURRENT_TIMESTAMP, `name`=VALUES(`name`), version=VALUES(version), ...;
END

但它在第一个插入时产生错误:

Error Code: 1442. Can't update table 'job' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我读到您无法在触发器或存储过程中更改同一个表。我想做一些不可能的事吗?如果行存在,则将插入更改为更新?

0 个答案:

没有答案