使用 if else 插入查询时 MySQL 过程中的语法错误
Syntax error in MySQL procedure while using if else insert query
我正在尝试使用 MySQL 创建存储过程,但我一直收到错误提示,但我无法在查询中找到错误。
我来自 MS SQL 背景,我不确定我的查询是怎么错的。有人理解错误吗?
Error Code: 1064. 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 '' at line 11
CREATE PROCEDURE SP_AddUpdateUser
(
IN InputUsername VARCHAR(512),
IN InputPassword VARCHAR(512),
IN InputEmail VARCHAR(512)
)
BEGIN
if(NOT EXISTS(SELECT 1 FROM TB_User WHERE Username = InputUsername)) then
INSERT INTO TB_User(Username, Password, Email, DateCreated)
SELECT InputUsername, InputPassword, InputEmail, Now();
else
UPDATE TB_User SET Password = InputPassword, Email = InputEmail WHERE Username = InputUsername;
end if;
END;;
将;放在now()之后。在存储的脚本中,您必须在每个语句后使用分号。
您在 MySQL 中采用了错误的方法。它有一条支持“更新插入”的语句——以及 insert
和 on duplicate key update
.
当您在无法复制的列上具有唯一索引或约束时,将触发此事件。在这种情况下,username
.
从唯一约束或索引开始:
create unique index unq_tb_user_username on TB_User(username);
你可能已经有了这个。那么,程序的主体就是:
CREATE PROCEDURE SP_AddUpdateUser
(
IN InputUsername VARCHAR(512),
IN InputPassword VARCHAR(512),
IN InputEmail VARCHAR(512)
)
BEGIN
INSERT INTO TB_User(Username, Password, Email, DateCreated)
SELECT InputUsername, InputPassword, InputEmail, Now()
ON DUPLICATE KEY UPDATE Password = InputPassword, Email = InputEmail;
END;
Here 是一个 db<>fiddle.
我正在尝试使用 MySQL 创建存储过程,但我一直收到错误提示,但我无法在查询中找到错误。
我来自 MS SQL 背景,我不确定我的查询是怎么错的。有人理解错误吗?
Error Code: 1064. 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 '' at line 11
CREATE PROCEDURE SP_AddUpdateUser
(
IN InputUsername VARCHAR(512),
IN InputPassword VARCHAR(512),
IN InputEmail VARCHAR(512)
)
BEGIN
if(NOT EXISTS(SELECT 1 FROM TB_User WHERE Username = InputUsername)) then
INSERT INTO TB_User(Username, Password, Email, DateCreated)
SELECT InputUsername, InputPassword, InputEmail, Now();
else
UPDATE TB_User SET Password = InputPassword, Email = InputEmail WHERE Username = InputUsername;
end if;
END;;
将;放在now()之后。在存储的脚本中,您必须在每个语句后使用分号。
您在 MySQL 中采用了错误的方法。它有一条支持“更新插入”的语句——以及 insert
和 on duplicate key update
.
当您在无法复制的列上具有唯一索引或约束时,将触发此事件。在这种情况下,username
.
从唯一约束或索引开始:
create unique index unq_tb_user_username on TB_User(username);
你可能已经有了这个。那么,程序的主体就是:
CREATE PROCEDURE SP_AddUpdateUser
(
IN InputUsername VARCHAR(512),
IN InputPassword VARCHAR(512),
IN InputEmail VARCHAR(512)
)
BEGIN
INSERT INTO TB_User(Username, Password, Email, DateCreated)
SELECT InputUsername, InputPassword, InputEmail, Now()
ON DUPLICATE KEY UPDATE Password = InputPassword, Email = InputEmail;
END;
Here 是一个 db<>fiddle.