Sqlite的2个问题

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,CODE,NAME FROM A

要注意的:

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

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


你可能感兴趣的:(Sqlite的2个问题)