加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite的2个问题

发布时间:2020-12-12 20:13:37 所属栏目:百科 来源:网络整理
导读:1.主键自增长问题 如果row_id是表主键,如果DDL中设置了auto increment,Insert row_id的时候只要设置为null则可以让主键从1开始自增长。 但是如果这时候删除以往的记录后,问题出现了,新增的记录主键值并不是从1开始的,而是从最后一条被删除的主键值+1开

1.主键自增长问题

如果row_id是表主键,如果DDL中设置了auto increment,Insert row_id的时候只要设置为null则可以让主键从1开始自增长。

但是如果这时候删除以往的记录后,问题出现了,新增的记录主键值并不是从1开始的,而是从最后一条被删除的主键值+1开始的,比如上次删除的记录主键是1200,新增一条是1201而不是1,解决办法是Drop table再重新创建


2.一个业务场景,一张表A更新另外一张表B,A与B主键相同的记录则用A的对B进行更新,A的主键在B不存在时则向B插入A的这条记录

在DB2中可以用UPDATE.SELECT和EXSITS组合的方法解决,但是在Sqlite中不能用。

这个问题找了很久,网上一些答案并不能满足我的需求,都是用INSERT OR REPLACE INTO ....VALUES(...,...)这种写死值的方法,而且还有说要用UNIQUE INDEX的,基本上互相抄袭,抱怨一下,自己不动脑子没试过不要复制粘贴再放到网上坑人

解决方法:

INSERT OR REPLACE INTO B (ROW_ID,CODE,NAME) SELECT ROW_ID,NAME FROM A

要注意的:

1.主键要是Integer类型的,不然报 constraint violation错

2.INTO后面和SELECT后的字段名最好写全,不然在被更新的那张表b中,有值但是SELECT中没写的字段会被覆盖为null

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读