MySQL Insert不存在不起作用

时间:2014-10-19 12:14:42

标签: mysql perl insert not-exists

下面粘贴的是我的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);" ); 

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

1 个答案:

答案 0 :(得分: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,了解有关完成此项工作的详情。