【发布时间】:2014-09-09 06:50:18
【问题描述】:
我使用'MariaDB 5.5 x64' and Client HeidiSQL。
服务器环境为Windows Server2012 Datacenter。
并且数据库use_progress 后面有一行
int id //自增主键
int owner //owner 用户唯一id
varchar[20] 名称 //key
int 值 //值
它存储在线游戏用户的状态键值类型
例如
id owner name value
856 656 stage0cleared 0
857 656 have_gold 10214
858 657 inventory 22
下一个查询的工作测试很好
select count(*) from use_progress where owner = 656 and name = "inventory";
INSERT INTO use_progress (use_progress.owner, use_progress.name, use_progress.value) VALUES (656, 'inventory', 7);
UPDATE use_progress SET use_progress.value = 7 WHERE use_progress.`owner` = 656 AND use_progress.`name` = 'inventory';
但是下一个查询是错误1064(语法错误)
BEGIN
IF ((select count(*) from use_progress where owner = 656 and name = "inventory") = 0 ) THEN
INSERT INTO use_progress (use_progress.owner, use_progress.name, use_progress.value) VALUES (656, 'inventory', 7);
ELSE
UPDATE use_progress SET use_progress.value = 7 WHERE use_progress.`owner` = 656 AND use_progress.`name` = 'inventory';
END IF;
END
错误紧随其后(总是那个错误):
/* SQL error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF ((select count(*) from use_progress where owner = 656 and name = "inventory")' at line 2 */
我尽我所能。是否使用 (),是否在每个列名中插入 dbname.tablename. 前缀。但在每种情况下,都会发生相同的错误。
我什至试过这个(第 2 行已更改):
BEGIN
IF (1>2) THEN
INSERT INTO use_progress (use_progress.owner, use_progress.name, use_progress.value) VALUES (656, 'inventory', 7);
ELSE
UPDATE use_progress SET use_progress.value = 7 WHERE use_progress.`owner` = 656 AND use_progress.`name` = 'inventory';
END IF;
END
但发生同样的错误(消息相同)
我不知道为什么会这样。
【问题讨论】:
-
您是否更改了分隔符?您只能在存储的例程中使用 BEGIN ... END。
标签: mysql sql database mariadb