所以我有一个适用于更新的触发器。完全正常。
在汽车中插入(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错误。我怎么写这个世界?
答案 0 :(得分:2)
问题在于这一行:
Insert in cars(date, id, parent_id) values (date, ford, 2);
in
应为INTO
。那是语法错误。
也就是说,使用INSERT...ON DUPLICATE KEY
或REPLACE 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后,您可以使用任何字段。