sharding-proxy bindingTables子表插入数据重复问题

版本:apache-shardingsphere-4.1.1-sharding-proxy
业务场景:
业务系统原先采用mycat中间件完成分库分表,目前替换为sharding-proxy
核心表为wo_work_order,关联十余张子表,形成父子表,
wo_work_order表主键id和子表唯一索引列work_order_id采用hash规则决定分片,父子表保证同一个工单数据在同一个分片库,子表插入时采用MySQL的insert into on dumplicat key update语法完成插入/更新操作,
子表的work_order_id列已建立唯一索引

问题描述:
子表插入出现数据重复,测试过正常用insert插入,字段名都写全(全部字段),分片都是均匀的,没有重复的,连接程序写入的时候,就会出现子表insert有重复数据,程序写入用的insert into wo_work_order_detail
(work_order_id, personal_name) values (123,‘test’)
ON DUPLICATE KEY UPDATE
personal_name = values(personal_name)没有id的,(不是全部字段),这样子表就会重复数据产生。

@dbaxulong 哈喽,这个问题应该已经解决了吧,是因为配置了 defaultDatabaseStrategy,defaultDatabaseStrategy 根据 id 字段进行分库,并且 id 字段配置了自动生成。由于语句中没有指定 id 字段,所以每次 insert 都会生成一个新的 id 值,导致同样的数据路由到不同的数据库中,在不同的数据库中进行 insert into … on duplicate key update …,导致重复写入该记录。

只需要调整下分片规则,配置 databaseStrategy 时,保证每条记录使用的分库 id 是固定的即可解决问题。

京ICP备2021015875号