Java-在MySQL中,如何仅在不存在行的情况下进行插入,仅在现有版本较少的情况下进行更新
作者:互联网
我正在寻找一种方法,仅在MySQL中不存在该行时才插入,并在该行存在且现有行的版本小于(或等于)新行的版本时进行更新.
例如,表定义为:
CREATE TABLE documents (
id VARCHAR(64) NOT NULL,
version BIGINT UNSIGNED NOT NULL,
data BLOB,
PRIMARY KEY (id)
);
并包含以下数据:
id version data
----------------------------
1 3 first data set
2 2 second data set
3 5 third data set
我想合并下表(UPDATE:id列是唯一的):
id version data
----------------------------
1 4 updated 1st
3 3 updated 2nd
4 1 new 4th
并且它应该产生以下内容(UPDATE:查看如何仅更新1和插入4):
id version data
----------------------------
1 4 updated 1st
2 2 second data set
3 5 third data set
4 1 new 4th
我看过INSERT … ON DUPLICATE KEY UPDATE …语句,但是它不允许使用某种WHERE子句.另外,我不能真正使用REPLACE,因为它也不允许WHERE.一个MySQL语句甚至可能吗?
我正在使用Java,并且正在尝试使用带有批处理(addBatch)的PreparedStatement插入/更新许多记录.任何帮助,将不胜感激.
更新:有什么方法可以将此查询与Java中的PreparedStatement一起使用?我有一个包含ID,版本和数据的Document对象列表.
解决方法:
我认为最好在INSERT ON DUPLICATE KEY UPDATE上插入.你可以像这样使用它
INSERT INTO table1 SELECT * FROM table2 ON DUPLICATE KEY UPDATE table1.data=IF(table1.version > table2.version, table1.data, table2.data), table1.version=IF(table1.version > table2.version, table1.version, table2.version)
未经测试的语法,但我相信这个想法应该可行.
标签:replace,insert-update,java,mysql,insert 来源: https://codeday.me/bug/20191023/1915981.html