一个表中只能拥有一个自增列 如果多个列需要自增 其它的列只能通过触发器来完成列值的自增
自增列: 每次都会按顺序递增,可以保证在一个表里的主键不重复 该列类型为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