如果存在,则更新表,否则在表中插入新行

时间:2016-07-05 09:16:48

标签: php mysql stored-procedures

我的存储过程中有以下查询行。此存储过程的目的是,如果网站链接已在表中,它将更新现有链接。如果不是,它将记录为来自另一个表的新行'值。

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');

它没有在表格中作为新记录插入。我能知道为什么吗?

1 个答案:

答案 0 :(得分:0)

插入重复密钥更新示例

" $"是参数并使website_id,website_link为唯一

INSERT INTO diffmod SET
        website_id = (SELECT id FROM   site_html Where  link=@para_link),
        website_link= $para_link,
        diffmod_content=$para_diffmod
        ON DUPLICATE KEY UPDATE
        diffmod_content=$para_diffmod
相关问题