MySQL存储过程如果存在

Sim*_*n R 1 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() WHERE id = _id and tmplvarid = 5;
    END;
    ELSE 
    BEGIN
    INSERT INTO cms.variables (`tmplvarid`, `contentid`, `value`) VALUES (5, _id, now());
    END;
    END IF;
END
Run Code Online (Sandbox Code Playgroud)

基本上,我在这个过程中尝试做的是如果该行已经存在于DB中,请更新它,否则插入它.

然而,尽管有任何结果SELECT * FROM cms.variables WHERE tmplvarid = 5 and id = _id,它只是插入数据库.

任何帮助将不胜感激.

Ron*_*hah 6

试试这个:

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
Run Code Online (Sandbox Code Playgroud)