2014-10-19 45 views
0

下面粘贴的是我的MySQL存储过程。MySQL插入不存在的地方不起作用

CREATE PROCEDURE `newrig`(
    IN x varchar(10), 
    IN y varchar (10), 
    IN z varchar(5), 
    OUT a INT 
) 
BEGIN 

     INSERT INTO rig (Name, Model,Type) 
     SELECT * from (SELECT x,y,z) as tmp 
     WHERE NOT EXISTS 
     (SELECT * FROM rig where Name=x 
     AND Model=y 
     AND Type=z);  
     SELECT LAST_INSERT_ID() INTO a; 

END 

这该是多么我从Perl的

$hDb->do("call newrig('krish','xx','j',\@a);"); 

结果是调用它;它不会将数据插入到表中。有人可以帮忙吗?

+0

第一个猜测是表中的值已经存在。 – 2014-10-19 12:41:18

回答

1

开始:

INSERT INTO rig (Name, Model,Type) values (x,y,z) 
    WHERE NOT EXISTS 
    (SELECT * FROM rig where Name=x 
    AND Model=y 
    AND Type=z); 

注意,如果记录已经存在,你得到last_insert_id值将没有任何意义。

通过在x,y,z上放置一个唯一密钥并使用insert ignore ..尽管如此,仍然不会为您提供记录#。


阅读thisthis有关如何进行这项工作的详细信息。

+0

MySQL在“values(x,y,z)”之后需要一个分号后跟一个END。如果没有where存在条款,它不适合我。如果记录存在,插入忽略技术将要求我检查最后一个插入ID。 – user2882622 2014-10-19 13:54:33

+0

此外,我想知道如果我的主键设置为自动递增和PK是记录的唯一键,INSERT IGNORE是否会忽略插入。 – user2882622 2014-10-19 14:10:37