首页 > 解决方案 > H2数据库基于一列合并

问题描述

如果 loginId 已经存在,我想更新或插入此表 dataTime 否则插入

CREATE TABLE IF NOT EXISTS UserLastActivity 
(
    id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    loginId VARCHAR(500) NOT NULL,
    dataTime BIGINT NOT NULL,
);

第一次尝试:

MERGE INTO UserLastActivity KEY(loginId) VALUES(#{loginId}, #{dataTime})

对于上述语句,我得到异常说明列数不匹配

第二次尝试:

MERGE INTO UserLastActivity KEY(loginId) (loginId, dataTime)
VALUES(#{loginId}, #{dataTime})

我得到异常

原因:org.h2.jdbc.JdbcSQLException: SQL 语句中的语法错误“MERGE INTO USERLASTACTIVITY KEY(LOGINID) (LOGINID[*], DATATIME) VALUES(?, ?)”;预期 "(, SELECT, FROM"; SQL 语句:

标签: h2

解决方案


两件事情:

  • 指定列名更安全,就像在任何INSERT.
  • 您需要为它指定一个值,loginId因为它已声明NOT NULL

    MERGE INTO UserLastActivity (id, loginId, dataTime) 
      KEY(loginId) 
      VALUES(10, 'user1', 1234);
    

推荐阅读