MYSQL触发器查看记录是否存在?

时间:2011-07-25 15:42:31

标签: mysql

所以我有一个适用于更新的触发器。完全正常。

在汽车中插入(date,id,parent_id)值(date,ford,2)

我需要做的是实际检查parent_id是否已经存在。如果它什么也不做,除非它不存在,那么执行insert语句。

现在我有

SET @myVar1 = (SELECT parent_id from cars where parent_id = NEW.id);
IF @myVar1 = NULL;
Insert in cars(date, id, parent_id) values (date, ford, 2);
ENDIF;

我一直收到sysntax错误。我怎么写这个世界?

2 个答案:

答案 0 :(得分:2)

问题在于这一行:

Insert in cars(date, id, parent_id) values (date, ford, 2);

in应为INTO。那是语法错误。

也就是说,使用INSERT...ON DUPLICATE KEYREPLACE INTO语句而不是更新时触发器可能会更好。但请注意REPLACE INTO,因为它可能很危险(但通过使用交易可以稍微减轻危险)。

答案 1 :(得分:1)

如果这是你真正需要的,那就不知道了。但你可以尝试这个

SET @myVar1 = (SELECT parent_id from cars where parent_id = NEW.id);
IF (@myVar1 is NULL) then
Insert into cars(`date`, id, parent_id) values (date(), new.`name`, new.id);
END IF;

Insert into cars(`date`, id, parent_id) values (date(), new.`name`, new.id) on duplicate key update `date`=date();
mysql上的

必须是#34;如果"不是" endif"。

new。name假设来自触发器表的汽车上的id字段

如果汽车表使用主键或如上所述的唯一键

,则可以使用重复键更新

如果您不想更改任何记录(如果存在),则在密钥更新更改为id = id后,您可以使用任何字段。