关于MySQL的insert ignore into和replace into

最后更新:2024-05-12 05:30:00 | 状态:未完成

务必注意,如果执行了replace into会把原数据删除,重新插入新数据,如果有自增主键的话,主键值会变化。
 //override=true : replace into
//override=false: insert ignore into
ServiceProxy.insert("CRM_USER", row, new DefaultConfigStore().override(Boolean.FALSE));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public static void override() throws Exception{
    String tab = "tab_override";
    Table table = service.metadata().table(tab);
    if(null != table){
        service.ddl().drop(table);
    }
    table = new Table(tab);
    table.addColumn("ID", "BIGINT").setAutoIncrement(true);
    table.addColumn("CODE1", "varchar(10)");
    table.addColumn("CODE2", "varchar(10)");
    table.addColumn("CODE3", "varchar(10)");
    table.addColumn("QTY", "INT");
 
    service.ddl().create(table);
    Index index = new Index<>();
    index.setUnique(true);
    index.addColumn("CODE1");
    index.addColumn("CODE2");
    index.addColumn("CODE3");
    index.setTable("tab_override");
    service.ddl().add(index);
    DataRow row = new DataRow();
    row.put("CODE1", 1);
    row.put("CODE2", 2);
    row.put("CODE3", 3);
    row.put("QTY", 100);
    service.insert(tab, row);
    row = new DataRow();
    row.put("CODE1", 1);
    row.put("CODE2", 2);
    row.put("CODE3", 3);
    row.put("QTY", 200);
    //不覆盖,重复数量忽略 影响行数0
    service.insert(tab, row, new DefaultConfigStore().override(Boolean.FALSE));
    DataSet set = service.querys(tab);
    System.out.println(set);
 
 
    row = new DataRow();
    row.put("CODE1", 1);
    row.put("CODE2", 2);
    row.put("CODE3", 3);
    row.put("QTY", 300);
    //覆盖,重复数量更新 影响行数2 原来的id:1,qty:100被删除 插入id:3, qty:300
    //注意这里执行的是delete+insert 而不是update 所以影响2行
    service.insert(tab, row, new DefaultConfigStore().override(Boolean.TRUE));
    set = service.querys(tab);
    System.out.println(set);
}

PG也提供了类似的功能,可以根据唯一约束 也可以根据指定列来判断重复,参考【关于PostgreSQL的ON CONFLICT
Apache ignite也提供了类似的功能(根据主键)参考【Apache ignite MERGE
首页 最近更新 搜索 提交 回复