tcm123 发表于 2018-9-28 10:04:01

嵌入式LINUX SQLITE数据库自增主键竟然出现重复值!

本帖最后由 tcm123 于 2018-9-28 10:05 编辑


id是自增主键 22114 前面已使用过。

设备平时也没关机,出现了重复值,导致程序运行不正确了,但下载到本地用软件是可以改的。

这可能是什么原因?

wx-ta 发表于 2018-9-28 10:07:27

99.99%是我们自身软件的问题

haffman1 发表于 2018-9-28 12:19:31

把程序贴出来    一张图能看出什么东西来

luobote55 发表于 2018-9-28 13:42:44

99%自己打脸。

norman33 发表于 2018-9-28 14:07:01

自增量又不是唯一,你要加上unique 才行

tcm123 发表于 2018-9-28 15:58:41

本帖最后由 tcm123 于 2018-9-28 16:04 编辑

norman33 发表于 2018-9-28 14:07
自增量又不是唯一,你要加上unique 才行

嗯,有想过这个。

但既然是主键,就应该是唯一的,难道这个不成立? 之前用其他数据库主键是插入不了同样的值的

(刚测了,用SQLITESUDIO 同样的id 是插不进的,说明主键是唯一不重复的)

而且这个主键并不是我赋值的,是数据库自行赋值的,怎么到了3万多又变成2万多了

norman33 发表于 2018-9-28 16:21:40

tcm123 发表于 2018-9-28 15:58
嗯,有想过这个。

但既然是主键,就应该是唯一的,难道这个不成立? 之前用其他数据库主键是插入不了同 ...

当有人手工去修改主键得时候得SQLITE不一定能保证主键唯一性(包括Update主键得值,insert得时候指定了主键值,重置表自增量得值等),所以要确保二选一,1.永远不去手工修改主键得值,2.不能保证1得时候,用Unique约束主键

norman33 发表于 2018-9-28 16:25:40

可以确定得是,用sqlite本身插入数据得时候不做unique检测得,也就是说重复主键会被正常执行,你用软件插入得时候可能是软件自己做了sql得重复检测,如果指定了unique,重复值操作得时候会报错。

负西弱 发表于 2018-9-28 17:37:28

我也遇到过,但原因就是程序插入的时候用了已经存在的主键

vtte 发表于 2018-9-28 19:12:49

我记得sqlite有些特性是依赖文件系统的,如果你的文件系统不支持锁定等特性的话,sqlite可能会有莫名其妙的错误

myxiaonia 发表于 2018-9-28 19:39:39

什么样的项目要用到sqlite,这玩意不小啊

tcm123 发表于 2019-7-27 16:07:15

norman33 发表于 2018-9-28 16:25
可以确定得是,用sqlite本身插入数据得时候不做unique检测得,也就是说重复主键会被正常执行,你用软件插入 ...

一年过去了,又有设备(ARM-LINUX+sqlite3)出现这个问题了

刚刚用SQLITESTUDIO和自己写代码测试,主键(自增)即使不加唯一约束,手动指定相同的主键ID也是插不进的,提示出错。

数据库没有人为插入修改,也没有多线程插入

文件系统用的EXT4

现在不光是重复ID这个问题,还有些SQLITE数据库发现莫名其妙的问题,小于某个ID值(就是业务里出现问题的这行记录) SQL搜索不到导致无法更新记录,大于的能搜索查到。 但用软件打开这些数据记录都有的。

怀疑可能是设备断电引起的,但没法验证

tcm123 发表于 2019-7-27 16:08:24

vtte 发表于 2018-9-28 19:12
我记得sqlite有些特性是依赖文件系统的,如果你的文件系统不支持锁定等特性的话,sqlite可能会有莫名其妙的 ...

一年过去了,又有设备(ARM-LINUX+sqlite3)出现这个问题了

刚刚用SQLITESTUDIO和自己写代码测试,主键(自增)即使不加唯一约束,手动指定相同的主键ID也是插不进的,提示出错。

数据库没有人为插入修改,也没有多线程插入

文件系统用的EXT4

现在不光是重复ID这个问题,还有些SQLITE数据库发现莫名其妙的问题,小于某个ID值(就是业务里出现问题的这行记录) SQL搜索不到导致无法更新记录,大于的能搜索查到。 但用软件打开这些数据记录都有的。

怀疑可能是设备断电引起的,但没法验证

qq11qqviki 发表于 2019-7-27 21:37:41

我也遇到过,但原因就是程序插入的时候用了已经存在的主键

mangocity 发表于 2019-7-27 22:08:37

用事务提交不能避免这个问题吗?

norman33 发表于 2019-8-13 08:59:15

tcm123 发表于 2019-7-27 16:07
一年过去了,又有设备(ARM-LINUX+sqlite3)出现这个问题了

刚刚用SQLITESTUDIO和自己写代码测试,主键 ...

为什么你用软件插入得时候不会重复,我猜想是软件在插入得时候软件自身已经做了id唯一得检测所以无法插入,我自用sqlite插入操作做过id重复检查从来没出现过你说得问题。
页: [1]
查看完整版本: 嵌入式LINUX SQLITE数据库自增主键竟然出现重复值!