使用 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 中采用了错误的方法。它有一条支持“更新插入”的语句——以及 inserton 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.