搜索
bottom↓
回复: 15

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

[复制链接]

出10入61汤圆

发表于 2018-9-28 10:04:01 | 显示全部楼层 |阅读模式
本帖最后由 tcm123 于 2018-9-28 10:05 编辑


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

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

这可能是什么原因?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2018-9-28 10:07:27 | 显示全部楼层
99.99%是我们自身软件的问题

出0入0汤圆

发表于 2018-9-28 12:19:31 | 显示全部楼层
把程序贴出来    一张图能看出什么东西来

出0入0汤圆

发表于 2018-9-28 13:42:44 | 显示全部楼层
99%自己打脸。

出0入36汤圆

发表于 2018-9-28 14:07:01 | 显示全部楼层
自增量又不是唯一,你要加上unique 才行

出10入61汤圆

 楼主| 发表于 2018-9-28 15:58:41 | 显示全部楼层
本帖最后由 tcm123 于 2018-9-28 16:04 编辑
norman33 发表于 2018-9-28 14:07
自增量又不是唯一,你要加上unique 才行


嗯,有想过这个。

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

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

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

出0入36汤圆

发表于 2018-9-28 16:21:40 | 显示全部楼层
tcm123 发表于 2018-9-28 15:58
嗯,有想过这个。

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

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

出0入36汤圆

发表于 2018-9-28 16:25:40 | 显示全部楼层
可以确定得是,用sqlite本身插入数据得时候不做unique检测得,也就是说重复主键会被正常执行,你用软件插入得时候可能是软件自己做了sql得重复检测,如果指定了unique,重复值操作得时候会报错。

出0入0汤圆

发表于 2018-9-28 17:37:28 | 显示全部楼层
我也遇到过,但原因就是程序插入的时候用了已经存在的主键

出0入33汤圆

发表于 2018-9-28 19:12:49 来自手机 | 显示全部楼层
我记得sqlite有些特性是依赖文件系统的,如果你的文件系统不支持锁定等特性的话,sqlite可能会有莫名其妙的错误

出0入0汤圆

发表于 2018-9-28 19:39:39 | 显示全部楼层
什么样的项目要用到sqlite,这玩意不小啊

出10入61汤圆

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

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

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

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

文件系统用的EXT4

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

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

出10入61汤圆

 楼主| 发表于 2019-7-27 16:08:24 | 显示全部楼层
vtte 发表于 2018-9-28 19:12
我记得sqlite有些特性是依赖文件系统的,如果你的文件系统不支持锁定等特性的话,sqlite可能会有莫名其妙的 ...

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

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

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

文件系统用的EXT4

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

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

出0入0汤圆

发表于 2019-7-27 21:37:41 | 显示全部楼层
我也遇到过,但原因就是程序插入的时候用了已经存在的主键

出0入0汤圆

发表于 2019-7-27 22:08:37 来自手机 | 显示全部楼层
用事务提交不能避免这个问题吗?

出0入36汤圆

发表于 2019-8-13 08:59:15 | 显示全部楼层
tcm123 发表于 2019-7-27 16:07
一年过去了,又有设备(ARM-LINUX+sqlite3)出现这个问题了

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

为什么你用软件插入得时候不会重复,我猜想是软件在插入得时候软件自身已经做了id唯一得检测所以无法插入,我自用sqlite插入操作做过id重复检查从来没出现过你说得问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 20:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表