2014-10-19 42 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