关于PostgreSQL的ON CONFLICT,如果存在重复数据 覆盖或忽略
最后更新:2024-05-13 05:30:00
|
状态:未完成
当执行 INSERT 操作时,如果数据表中不存在对应的记录,执行插入操作;如果数据表中存在对应的记录,则执行更新操作
参考【MySQL的insert ignore into和replace into】
Apache ignite也提供了类似的功能(根据主键)
参考【Apache ignite MERGE】
是否存在可以根据 1.指定列判断 或者2 唯一约束名
Table table = service.metadata().table("CRM_USER"); if(null != table){ service.ddl().drop(table); } table = new Table("CRM_USER"); table.addColumn("ID", "GIBINT").setPrimaryKey(true).setAutoIncrement(true); table.addColumn("CODE", "VARCHAR(10)"); table.addColumn("NAME","VARCHAR(10)"); service.ddl().create(table); //唯一索引 Constraint u_code = new Constraint<>(table, "u_code", true).addColumn("CODE"); service.ddl().add(u_code); DataSet set = new DataSet(); for(int i=0; i<10; i++){ DataRow row = new DataRow(); row.put("CODE", "C"+i); row.put("NAME", "张三"+i); set.add(row); } service.insert("CRM_USER", set); set = new DataSet(); for(int i=0; i<3; i++){ DataRow row = new DataRow(); row.put("CODE", "C"+i); row.put("NAME", "王五"+i); set.add(row); } //根据CODE判断 重复则覆盖 ConfigStore configs = new DefaultConfigStore(); configs.override(true, "CODE"); service.insert("CRM_USER", set, configs); set = new DataSet(); for(int i=3; i<6; i++){ DataRow row = new DataRow(); row.put("CODE", "C"+i); row.put("NAME", "赵六"+i); set.add(row); } //根据唯一索引判断 重复则覆盖 configs.override(true, u_code); service.insert("CRM_USER", set, configs); set = new DataSet(); for(int i=6; i<9; i++){ DataRow row = new DataRow(); row.put("CODE", "C"+i); row.put("NAME", "不覆盖"+i); set.add(row); } //根据唯一索引判断 重复则忽略 configs.override(false, u_code); service.insert("CRM_USER", set, configs);
参考【MySQL的insert ignore into和replace into】
Apache ignite也提供了类似的功能(根据主键)
参考【Apache ignite MERGE】