2016-07-05 114 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

哪个错误?你可以添加 –

相关问题