Flutter中SQFlite包执行插入操作时id字段的处理规则是怎样的?
Flutter sqflite 主键id字段相关问题解答
猜想1核实结果
结论:完全正确
通常使用sqflite时,我们会将表的id字段声明为INTEGER PRIMARY KEY AUTOINCREMENT类型,新增未存入数据库的用户数据时,不需要主动给id赋值,因此数据模型类的id字段需要设置为可空类型int?,适配Dart空安全编码规范。
猜想2核实结果
结论:实际逻辑为A+B组合,C逻辑不成立
sqflite是对原生SQLite能力的封装,insert方法的执行逻辑完全遵循SQLite原生规则,不会主动忽略传入的id字段:
- 若插入的map中id为null:SQLite会自动生成唯一的自增id完成插入
- 若插入的map中id非空:SQLite会尝试用你传入的id执行插入,若该id已在表中存在,会抛出主键冲突异常,除非你调用
insert时指定了conflictAlgorithm参数(比如ConflictAlgorithm.replace)处理冲突场景。
补充最佳实践
如果业务不需要手动指定id,新增记录时无需给id赋值,insert方法执行成功后会返回生成的自增id,你可以将该id回写到模型对象中即可。
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

