如何修复SQLite复合主键问题以实现数据正常插入?
解决SQLite组合主键设置问题
你遇到的报错是因为误将ID和日期字段设为独立主键,而非组合主键。SQLite中如果单独给每个字段勾选主键,会要求每个字段自身的值必须唯一,但你需要的是ID与日期的组合值唯一,各自允许重复。
解决方法分两种场景:
场景1:重新创建表(推荐)
- 打开DB Browser for SQLite,进入「Create Table」界面
- 添加ID和date字段(date字段建议用TEXT类型存储
YYYY-MM-DD格式的日期,SQLite无原生DATE类型) - 不要单独给两个字段勾选「Primary Key」,转而在界面下方的「Table Constraints」区域添加约束:
PRIMARY KEY ("ID", "date") - 点击「OK」完成表创建,此时只有ID+日期的组合重复时,才会触发唯一约束。
场景2:修改已存在的表
SQLite不支持直接修改现有表的主键约束,需按以下步骤操作:
- 导出原表的数据(可导出为CSV或SQL脚本)
- 在「Database Structure」面板右键原表,选择「Drop Table」删除旧表
- 按照场景1的方法创建带组合主键的新表
- 重新导入之前导出的数据
验证效果
插入测试数据:
- 插入
ID=1, date='2024-01-01'和ID=1, date='2024-01-02':不会报错,符合各自字段允许重复的需求 - 重复插入
ID=1, date='2024-01-01':会触发唯一约束报错,符合组合唯一的要求
内容的提问来源于stack exchange,提问作者Birdie
相关产品推荐
相关产品推荐

