2011-07-25 56 views
0

所以我有一个触发器在更新上工作。完全正常工作。MYSQL触发器是否先查看记录是否存在?

插入汽车(日期,编号,PARENT_ID)值(日期,福特,2)

我需要做的是实际检查,看是否PARENT_ID已经存在。如果它什么都不做,但如果它不存在,那就执行插入语句。

现在我有

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

的问题是在这条线:

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

in应该是INTO。这是语法错误。

也就是说,您可能更适合使用INSERT...ON DUPLICATE KEYREPLACE INTO语句,而不是更新触发器。尽管如此,请注意REPLACE INTO,因为它可能很危险(但通过使用事务可以稍微缓解危险)。

+0

INTO不是问题所在。 – SeeleyBoothe

+0

也重复键上插入不会工作,因为parent_id不是一个键,我不想插入时,有一个现有的parent_id。 – SeeleyBoothe

+0

您发布的查询确实与将parent_id设置为'UNIQUE KEY'并使用'INSERT ... ON DUPLICATE KEY'完全相同。 –

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必须是 “结束时,如果” 不 “ENDIF”。

新的。 name是假设对汽车是id字段从触发器表

您可以使用重复键更新,如果汽车使用表的主键或唯一键像上面提到的

,如果你并不想改变,如果任何记录然后在密钥更新更改为id = id之后存在,或者您可以使用任何字段。