位置: 编程技术 - 正文

SQLite3中自增主键相关知识总结(sql自增1)

编辑:rootadmin

一、SQLite清空表并将自增列归零

SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容。但SQLite不支持这个语句。在SQLite中直接使用 DELETE FROM TableName 就可以了。对于大多数DBMS来说,用DELETE不如用TRUNCATE 速度快,因为TRUNCATE 不用访问整个表,不用记录数据的变动。

SQLite虽然不支持TRUNCATE,但它对DELETE做了优化:通常在清空表的时候,还需要把自增列归零。在SQLite中定义自增列的方法如下:

当SQLite数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。如果想把某个自增列的序号归零,只需要修改 sqlite_sequence表就可以了。

也可以直接把该记录删掉: 要想将所有表的自增列都归零,直接清空sqlite_sequence表就可以了:

二、Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用

在用sqlite设计表时,突然想到一个问题,就是我设计的表中,每个表都有一个自己的整形id值作为主键,其实可以不指定这么一个id值,sqlite内部本来就会为每个表加上一个 rowid,这个rowid可以当成一个隐含的字段使用,

为什么不直接使用这个内部的rowid作为每个表的id主键呢。使用自增长字段为主键有不少问题,比如维护或是在大型分布应用中主键冲突的解决等。在一些大型分布应用中主键一般选用guid,这可以有效的避免主键冲突,减少对主键维护的工程。当然,对于中小型的应用,自增长字段的好处更多一些,简单、快速。

Sqlite中,一个自增长字段定义为 INTEGER PRIMARY KEY AUTOINCREMENT那么在插入一个新数据时,只需要将这个字段的值指定为NULL,即可由引擎自动设定其值,引擎会设定为最大的rowid+1 当然,也可以设置为非NULL的数字来自己指定这个值,但这样就必须自己小心,不要引起冲突。

rowid的新值会这个最大数之前随机找一个没被使用了的值。所以在rowid达到最大值前,rowid的值是严格单调增加的。INTEGER PRIMARY KEY AUTOINCREMENT 自增长字段的算法与rowid稍微有些不同。第一,在达到最大值后,rowid会找已被删除的字段对应的rowid作为新值,而自增长字段则会丢出一个SQLITE_FULL的错误。第二,自增长字段在增加新值时,是找一个从没被使用过的rowid作为新值,而rowid则是找最大已存在的rowid+1。

这里对应用的影响会比较大,尤其是一些对id值有依赖的元记录,只适合使用自增长字段而不能用rowid。比如,我们设计一个元记录表:然后,定义一个一级表,来描述其它表的结构:

最后,我们的应用可以根据这个一级表来产生实际使用的二级表。这样为保证兼容性meta_struct中的id必须是唯一的,如果有字段被删除,也不能重复使用这个字段的id值,不然,在数据库合并时,一级表和二级表就会混乱。所以meta_struct表中的主键只能使用自增长字段,而不能用rowid。

第三,使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,用户可以看到,并可以用使用Update、Delete和Insert操作,但不建议这么使用,这会让引擎混乱。如果使用rowid,也会有这么一个内部表,用户可以维护rowid值,但看不到。

推荐整理分享SQLite3中自增主键相关知识总结(sql自增1),希望有所帮助,仅作参考,欢迎阅读内容。

SQLite3中自增主键相关知识总结(sql自增1)

文章相关热门搜索词:sql自增怎么设置,sql怎么设置自增主键,sql怎么设置自增主键,sql自增怎么设置,sql自增怎么设置,sql怎么设置自增主键,sql怎么设置自增主键,sql自增怎么设置,内容如对您有帮助,希望把文章链接给更多的朋友!

sqlite时间戳转时间语句(时间转时间戳) 下面是具体的实现代码:sqliteSELECTdatetime(,'unixepoch','localtime');+------------------------------------------------+|datetime(,'unixepoch','localtime')|+-------------

初识SQLITE3数据库 数据库DataBase,我们都没有接触过数据库,那么数据库是什么?它是一个有结构的、集成的、可共享的统一管理的数据集合!所谓有结构的,指的是数

SQLite数据库安装及基本操作指南 1.介绍SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠

标签: sql自增1

本文链接地址:https://www.jiuchutong.com/biancheng/312815.html 转载请保留说明!

上一篇:SQLite3中的日期时间函数使用小结

下一篇:sqlite时间戳转时间语句(时间转时间戳)

  • 投资性房地产采用成本模式计量
  • 没有销项税只有进项税需要结转未交增值税吗
  • 个税申报逾期罚款怎么交
  • 个体工商户税收标准2023年
  • 2021年成本类科目
  • 企业管理费可以扣除吗
  • 制造费用结转后有没有余额
  • 补计提个税的会计分录
  • 商品非正常损耗收取的赔偿款账务处理怎么做?
  • 建筑业出售废旧电脑取的收入如何申报
  • 低值易耗品报废时
  • 年末要计提所得税分录
  • 营改增后向境外提供有偿服务是否需要缴纳增值税?
  • 水利基金减免政策2022
  • 餐饮发票一千多钱税
  • 不征收增值税项目进项税额可以抵扣吗
  • 外包服务费税率是多少
  • 个人消费索要公司的钱
  • 资产委托经营管理合同
  • 收到劳务外包发票计入什么科目
  • 长期股权投资计提减值准备
  • 境外公司在境内取得的收入如何交税
  • 领取劳保用品如何做凭证怎么做会计分录?
  • 收到生育津贴的短信是真的吗
  • 更改win10通知
  • linux系统中配置网卡ip地址的命令为
  • 在win7系统中文件属性有哪些
  • 代理买卖证券款是经纪业务费用吗
  • 资产减值损失结转
  • 网络看不到局域网图标
  • esafec.dll是什么东西
  • 办理发票缴销需要提供的资料
  • 会计差错及账项调整
  • 移动端h5页面适配
  • 深度学习第一步——Pytorch-Gpu环境配置:Win11/Win10+Cuda10.2+cuDNN8.5.0+Pytorch1.8.0(步步巨细,少走十年弯路)
  • k8s控制器模式
  • nodejs如何使用
  • 出口退税逾期申报,需申报出口货物收汇情况表
  • 哪些研发费用可以资本化
  • 单位社保年底清算
  • 电子商业汇票业务
  • 银行回单打回来会计要做什么
  • 织梦添加文章如何修改高级参数
  • 外贸企业出口退税流程(详细步骤)
  • mysql导入sql文件命令
  • 金税四期对增值税专票
  • 处理废旧材料会计分录
  • 补计提去年所得税会影响当月资产
  • 销售旧固定资产开票编码
  • 实收资本为零该怎么办
  • 坏账核销在企业所得税汇算清缴的填写
  • 事业单位利息收入的正确分录
  • 车子的上牌费要计入成本吗
  • 收付转三种凭证的限制类型不同所以限制科目也不同
  • 小规模需要进项税额吗
  • 做好成本会计的基础工作主要对企业成本管理有什么意义
  • xp系统卡到开机画面
  • ipad和iPhone的mac地址区别
  • ubuntu kde gnome
  • win8系统磁盘清理在哪里
  • 演示模式怎么设置
  • linux系统服务器怎么进入桌面
  • 微软7月补丁
  • win7系统打开java的控制面板的方法
  • cocos2dx视频教程
  • csh,tcsh,bash,sh等shell的区别
  • css you
  • 显示某两个字符的函数
  • js判断鼠标位置是否在元素区域内使用
  • ajax请求传参
  • javascript基础编程
  • c#属性窗口
  • jquery fadein不起作用
  • nodejs基础教程
  • static function FindObjectsOfType (type : Type) : Object[]
  • python设计二叉树结构
  • 什么车属于应征消费税的汽车
  • 税控盘时钟异常怎么办
  • 福建原盐和自然盐有什么区别
  • 发票验旧后还能开票吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设