You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Sqlite与MySQL双向同步的主键重复问题求解

本地sqflite与MySQL双向同步主键重复问题的解决方案方向

主键重复的核心原因是双方主键生成规则不一致或同步逻辑未处理冲突,并非单一调整某一侧表就能解决,需从以下两方面入手:

一、统一主键生成策略

  • 禁止两边各自使用自增主键(如sqflite的AUTOINCREMENT、MySQL的AUTO_INCREMENT),这是最易引发重复的诱因。
  • 推荐采用全局唯一ID规则:比如UUID,Flutter侧用uuid包生成,MySQL侧用UUID()函数生成,两边主键字段统一设为字符串类型(sqflite用TEXT,MySQL用CHAR(36)),从根源避免主键重复。
  • 若坚持使用自增类主键,需为两边分配不重叠的主键范围(如本地库用1-100000,服务器库用100001+),但这种方式扩展性差,仅适合小规模场景。

二、优化同步冲突处理逻辑

  • 同步操作前必须增加冲突检测:插入前先查询目标库是否存在对应主键,存在则执行更新而非插入——MySQL侧用INSERT ... ON DUPLICATE KEY UPDATE语句,sqflite侧直接调用insertOrReplace()方法。
  • 根据业务需求明确同步优先级:比如本地修改后同步到服务器时,若服务器已有相同主键数据,需按规则决定是覆盖服务器数据、保留服务器数据还是合并字段内容。

三、表结构调整的范围

  • 若因主键类型或生成规则导致重复,两边的表都需要调整:统一主键字段类型、移除自增属性,适配全局唯一ID的存储。
  • 确保两边表的主键都设置了UNIQUE约束,避免非法重复数据插入,同时为冲突处理提供基础。

内容的提问来源于stack exchange,提问作者Zakaria Houache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:21:57