我遇到了一个我似乎无法解决的问题。我非常确定InserProc
的以下定义曾经有效,但现在当我尝试创建它时(尝试使用SQL Fiddle)我遇到了You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS
。如果这不起作用,如何插入变量首先检查它是否存在使用类似的构造(我知道还有其他可能性)?
CREATE TABLE Test(Id INT);
SELECT @var := 1;
INSERT INTO Test(Id) SELECT @var;
DELIMITER $$
CREATE PROCEDURE InserProc(in _Id INT)
BEGIN
INSERT INTO Test(Id)
SELECT _Id
WHERE NOT EXISTS
(
SELECT 1
FROM Test
WHERE Id = _Id
);
END$$
< edit:编辑短脚本以包含分隔符,使其更加完整。情节变粗,因为SQL Fiddle在语法上也不接受同事的MySQL安装,但在我的机器上它运行得很好。很奇怪!
< conlusion:它出现在版本5.7.11-log上,但是在版本5.6.32-log上却没有。还有待确定的是,如果这只是这个版本的一个特性,并且在未来的某个版本中消失了,也许只是修复了语法。
答案 0 :(得分:0)
我认为这是因为存在查询中缺少FROM
。但是,我想查询是否检查表中是否已存在记录,如果没有,则插入它。下面是另一个例子:
CREATE TABLE Test (Id INT);
DELIMITER //
CREATE PROCEDURE MyProc (IN _Id INT)
BEGIN
DECLARE total INT;
select count(*) into total
from Test where id = _Id;
if(total = 0) then
insert into Test(Id) values(_id);
end if;
END//
DELIMITER ;