MySQL 如果存在则更新,否则插入会抛出语法错误

MySQL update if exists else insert throws syntax error

尝试根据特定用户名而不是 ID 更新现有记录,但没有成功。我写了以下查询,但我遇到了找不到的语法错误。

IF EXISTS (SELECT 1 FROM users WHERE username = 'REMOTEUSER1')
    THEN
        BEGIN
            UPDATE users
                SET username = 'REMOTEUSER1', password = 'BJxp98YkVbt4', exp_date = '1650991560', member_id = 1, is_mag = '0', play_token = '', reseller_notes = ''
                WHERE username = 'REMOTEUSER1'
        END;
    ELSE
        BEGIN
            INSERT INTO users (
                username,
                password,
                exp_date,
                member_id,
                is_new,
                play_token,
                reseller_notes
            ) VALUES (
                'REMOTEUSER1',
                'BJxp98YkVbt4',
                '1650991560',
                1,
                0,
                '',
                ''
            )
        END;
    END IF;

IF-ELSE 条件语句构造支持通过 FUNCTIONSSTORED PROCEDURES 使用,不能像普通查询那样使用它。

如果您的 username 列是 UNIQUE indexPRIMARY KEY 我会使用 INSERT ... ON DUPLICATE KEY UPDATE Statemen

INSERT INTO users (
    username,
    password,
    exp_date,
    member_id,
    is_new,
    play_token,
    reseller_notes
) VALUES (
    'REMOTEUSER1',
    'BJxp98YkVbt4',
    '1650991560',
    1,
    0,
    '',
    ''
) ON DUPLICATE KEY UPDATE
 password = 'BJxp98YkVbt4',
 exp_date = '1650991560', 
 member_id = 1, 
 is_mag = '0', 
 play_token = '', 
 reseller_notes = '';

sqlfiddle

如果 is_mag 是位 (1)(布尔值),则可能是您将其设置为“0”的更新部分

要么将布尔值设置为 整数 值 0,要么在其前面加上 b

my_bool = b'0'