数据库
首页 > 数据库> > Java-在MySQL中,如何仅在不存在行的情况下进行插入,仅在现有版本较少的情况下进行更新

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