【发布时间】:2012-07-28 19:11:42
【问题描述】:
我已经为此苦苦挣扎了太久,所以我在这里寻求帮助......
我有一个 MySQL 存储过程,我想执行以下操作:
给定记录的“id”和“用户名”
- 如果表中不存在id,则创建记录
- 否则,如果 id 存在且用户名与存在的用户名不同,则更新记录
- 否则什么都不做
我尝试了以下方法:
BEGIN
DECLARE doCreate INT;
DECLARE doUpdate INT;
SELECT COUNT(*) INTO doCreate FROM app_user WHERE id=1;
IF (doCreate > 0) THEN
SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
END IF
IF(doCreate = 0) THEN ---SYNTAX ERROR ON THIS LINE---
SELECT 'CREATE';
ELSE IF(doUpdate = 0) THEN
SELECT 'UPDATE';
ELSE
SELECT 'NOTHING';
END IF
END
我也尝试用 case 语句替换 if-elseif-else 块,但得到相同的结果...
CASE ---ERROR ON THIS LINE---
WHEN doCreate = 0 THEN
SELECT 'CREATE';
WHEN doUpdate = 0 THEN
SELECT 'UPDATE';
ELSE
SELECT 'NOTHING';
END
- 我似乎在第一个 END IF 之后出现的任何内容都出现语法错误,所以这是出现的第一个问题...
任何帮助将不胜感激 - 我确信有更好的方法来做到这一点。
【问题讨论】:
-
一个更简单的方法是使用
INSERT (id,username) INTO app_user VALUES ({id},{username}) ON DUPLICATE KEY UDPATE username = VALUES(username)。 -
Vatev,我认为使用您的解决方案,如果 id 存在,它将始终执行更新。如果所有字段都相同,我不希望它执行更新。
-
是的,它会的。我认为我应该建议它,因为它以更简单的方式与您的存储过程做类似的事情。
标签: mysql if-statement phpmyadmin procedure case-statement