h2 - 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 语句:
解决方案
两件事情:
- 指定列名更安全,就像在任何
INSERT
. 您需要为它指定一个值,
loginId
因为它已声明NOT NULL
。MERGE INTO UserLastActivity (id, loginId, dataTime) KEY(loginId) VALUES(10, 'user1', 1234);