MySQL存储过程(如果存在)
我正在MySQL中创建一个存储过程,在使用IF-EXISTS时遇到了问题 我的SQL是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()
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替换为您的值并告诉我结果