sqlite 自增列 起始值和值不连续的问题

一个表中只能拥有一个自增列 如果多个列需要自增 其它的列只能通过触发器来完成列值的自增


自增列: 每次都会按顺序递增,可以保证在一个表里的主键不重复   该列类型为integer

                定义形式:定义形式不同 生成序号的规则大方向相同也有差异  各有各的优势

                        1:INTEGER PRIMARY KEY AUTOINCREMENT  整形 主键 自增

                         2:INTEGER PRIMARY KEY    整形 主键


seq值: sqlite数据库用来保存表中自增列中存储的最大自增值  新插入的记录自增值默认为该值+1 存储在sqlite_sequence表的seq列中

定义形式一:

用seq列保存最大自增值 自动生成的自增值为正数 最小从1开始  

想插入0和负数的自增值必须插入时手动指定 

删除自增值最大那条记录或删除整个表记录时seq值不变 默认新插入的自增值为seq+1


插入操作:

      待插入的记录有自增列值并不为null时使用待插入的自增值插入

      待插入的记录没有自增列值或自增列值为null时 

               获取seq值成功:

                       seq值<表中自增列最大值:让表中自增列最大值+1 赋给待插入的自增列插入

                       seq值>=表中自增列最大值:让seq值+1 赋给待插入的自增列插入

               获取seq值失败:用初始值1 赋给待插入的自增列插入 

插入结果:

       插入失败:在自增列中待插入的自增列值

       插入成功:在自增列中没有待插入的自增列值

跟新seq值:前提插入成功

       没有seq值:

                待插入的自增值<=0:seq值为0

                待插入的自增值>0:seq值为待插入的自增值

       有seq值:

                待插入的自增值<=seq值:seq值不变

                待插入的自增值>seq值:seq值为待插入的自增值


delete 表操作 不会修改seq值  每删除一条记录会记录到事物日志中等待回滚

truncate 表操作会干掉seq值 事物日志中记录删除表操作  不能回滚  sqlite3不支持


在sqlite3中在逻辑上做到truncate操作执行以下2条语句  不过效率比truncate差

一:drop掉该表  在重建

二:1. delete  from  table  2.update sqlite_sequence set seq=0 where name='table' 或 delete from sqlite_sequence wh

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值