2016-07-05 130 views
0

我的存儲過程中有以下查詢行。這個存儲過程的目的是,如果網站鏈接已經在表中,它將更新現有的鏈接。如果不是,它將記錄爲另一個表的值中的新行。如果存在,更新表,否則在表中插入新行

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_diffmod_v2`( 
IN para_diffmod LONGTEXT, 
IN para_link LONGTEXT) 
BEGIN 

IF EXISTS (
    SELECT website_link FROM diffmod WHERE website_link=para_link 
    )THEN 
    UPDATE diffmod 
    SET diffmod_content=para_diffmod 
    WHERE website_link= para_link; 

ELSE 
    INSERT INTO diffmod(website_id,website_link) 
    SELECT id,link 
    FROM site_html 
    Where link=para_link; 

    UPDATE diffmod 
    SET diffmod_content= para_diffmod 
    where website_link = para_link; 

END IF; 
END 

比方說,www.google.com已被記錄。當我打電話像:

CALL myDB.insert_diffmod_v2('test','www.google.com'); 

有沒有問題,它會更新現有的記錄。

但是,當我叫這是不是在記錄中的鏈接(假設雅虎)像

CALL myDB.insert_diffmod_v2('test','www.yahoo.com'); 

它沒有在表中插入新記錄。我能知道爲什麼嗎?

+2

請不要使用無關的標記。 MySql **不是** sql服務器。 –

+0

你可以直接使用重複鍵更新語句而不是以上 –

+0

我可以知道我該怎麼辦?我對MySQL – Achilles

回答

0

插入到上的重複密鑰更新例如

「$」的參數,使website_id,website_link獨特

INSERT INTO diffmod SET 
     website_id = (SELECT id FROM site_html Where [email protected]_link), 
     website_link= $para_link, 
     diffmod_content=$para_diffmod 
     ON DUPLICATE KEY UPDATE 
     diffmod_content=$para_diffmod 
+0

相當陌生,請檢查此並讓我知道 –

+0

它顯示以下錯誤。 錯誤代碼:1054.'字段列表'中的未知列'$ para_link'\t 0.000秒 – Achilles

+0

哪個錯誤?你可以添加 –

相關問題