Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程(如果存在)_Mysql_Stored Procedures - Fatal编程技术网

MySQL存储过程(如果存在)

MySQL存储过程(如果存在),mysql,stored-procedures,Mysql,Stored Procedures,我正在MySQL中创建一个存储过程,在使用IF-EXISTS时遇到了问题 我的SQL是 CREATE DEFINER=`##`@`%` PROCEDURE `myTestProceedure`(IN _id INT) BEGIN IF EXISTS (SELECT * FROM cms.variables WHERE tmplvarid = 5 and id = _id) THEN BEGIN UPDATE cms.variables SET value = now()

我正在MySQL中创建一个存储过程,在使用IF-EXISTS时遇到了问题

我的SQL是

CREATE DEFINER=`##`@`%` PROCEDURE `myTestProceedure`(IN _id INT)
BEGIN
    IF EXISTS (SELECT * FROM cms.variables WHERE tmplvarid = 5 and id = _id) THEN
    BEGIN
    UPDATE cms.variables SET value = now() WHERE id = _id and tmplvarid = 5;
    END;
    ELSE 
    BEGIN
    INSERT INTO cms.variables (`tmplvarid`, `contentid`, `value`) VALUES (5, _id, now());
    END;
    END IF;
END
基本上,我在这个过程中要做的是,如果该行已经存在于数据库中,则更新它,否则插入它

然而,不管tmplvarid=5和id=\u id从cms.variables中选择*得到什么结果,它只是插入到数据库中

任何帮助都将不胜感激

试试这个:

CREATE DEFINER=`##`@`%` PROCEDURE `myTestProceedure`(IN _id INT)
BEGIN
    IF (SELECT count(*) FROM cms.variables WHERE tmplvarid = 5 and id = _id)>0 THEN
    BEGIN
    UPDATE cms.variables SET value = now() WHERE id = _id and tmplvarid = 5;
    END;
    ELSE 
    BEGIN
    INSERT INTO cms.variables (`tmplvarid`, `contentid`, `value`) VALUES (5, _id, now());
    END;
    END IF;
END

在if出口中,只需按照
中选择1,而不是
选择*
或只执行
中选择1?但是您是对的,
count(*)
也应该这样做,因为子查询不应该返回多行。顺便说一句+1我已将其更改为你们两人建议的内容,但尽管数据已经插入,但仍会继续插入。这意味着您的表中没有tmplvarid=5和id=\u id的任何记录。尝试从cms.variables运行SELECT count(*),其中tmplvarid=5,id=\u id;查看结果我运行了三次程序,它在该表中创建了三行,tmplvarid=5,id=1(传递给proc的id)。请从cms.variables运行SELECT count(*),其中tmplvarid=5,id=\u id;将_id替换为您的值并告诉我结果