iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何禁用rowid优化SQLite数据库
  • 913
分享到

如何禁用rowid优化SQLite数据库

2024-04-02 19:04:59 913人浏览 独家记忆
摘要

如何禁用rowid优化sqlite数据库?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。  1.0介绍默认情况下,SQLite数据库中的每一行都会有

如何禁用rowid优化sqlite数据库?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。

 
1.0介绍
默认情况下,SQLite数据库中的每一行都会有一个叫做rowid的特殊列,该列唯一标识数据库表中的某一行。然而如果在CREATE TABLE语句的后面添加WITHOUT ROWID关键字,就会禁用rowid这一列。有时候省略掉rowid,能够带来空间和性能上的提升。
1.1 语法
现在创建一个WITHOUT ROWID的表,最直接的方式就是在CREATE TABLE 语句之后添加关键字WITHOUT ROWID.例如:
CREATE TABLE IF NOT EXISTS Wordcount(
  word TEXT PRIMARY KEY,
  cnt INTEGER
) WITHOUT ROWID;
如其他所有的SQL语法一样,关键字的大小写不敏感。如下的任何一种方式都可以接受:
WITHOUT rowid , withoutrowid , WIThOut rOwId .她们代表一个意思。
 
注意:如果表指定了WITHOUT ROWID属性,表必须指定PRIMARY KEY。否则创建表的时候,会返回错误,错误的大体意思是指定WITHOUT ROWID的创建表语句缺少PRIMARY KEY。
 
大多数情况下,rowid和oid或者_rowid_代表一个意思。然而只有rowid才可以出现在创建表的语句当中。
 
1.2兼容性
只有SQLite 3.8.2版本之后的程序才可以使用WITHOUT ROWID关键字。早期版本的SQLite打开携带WITHOUT ROWID属性的表,将会返回一个malfORMed database schema 的错误。
 
1.3 Quirks(特殊性)
迄今为止,WITHOUT ROWID 只能够被SQLite数据库使用,其他的数据库引擎并没有兼容该关键字。在正统的系统中,即使没有WITHOUT ROWID关键字,所有的表也应该表现的和WITHOUT ROWID的效果一样。然而,SQLite在一开始被设计的时候,就采用整型的ROWID来简化实现的方式。这种方法表现很好很多年了。但是随着SQLite的需求的增长,(the need for tables in which the PRIMARY KEY really did correspondto the underlying row key grew more acute)对于表指定PRIMARY KEY属性变得更加迫切,因此和rowkey的矛盾更加尖锐。为了兼容过去的已经被使用了很久很久的程序,因此without rowid的概念终于被添加到SQLite中,(The WITHOUT ROWID concept was added in order to meet that needwithout breaking backwards compatibility with the billions of SQLite databasesalready in use at the time (circa 2013).)
为了无缝的兼容过去成千上万的程序,WITHOUT ROWID的概念被添加到SQLite中。
2.0 与携带Rowid表不同之处
WITHOUT ROWID是一个优化选项。她没有提供任何新的特性(capablilities).操作携带ROWID表和操作不携带ROWID的表,使用的都是相同的语法。唯一的优点是节省磁盘空间,并且比普通的表快一些。
 
多数情况下,携带rowid表和不携带rowid表是可以互换的(interchangeable).但是WITHOUT ROWID表存在一些限制,而这些限制是普通的rowid表不具备的。
 
1.指定了WITHOUT ROWID的表必须指定PRIMARYKEY, 否则建表失败
2指定了WITHOUT ROWID的表不能够指定INTEGERPRIMARY KEY。In an ordinary table, "INTEGER PRIMARY KEY" means that thecolumn is an alias for the rowid. But since there is no rowid in a WITHOUTROWID table, that special meaning no longer applies. An "INTEGER PRIMARYKEY" column in a WITHOUT ROWID table works like an "INT PRIMARYKEY" column in an ordinary table: It is a PRIMARY KEY that has integeraffinity.
3 指定了WITHOUT ROWID的表不能使用AUTOINCREMENT关键字

关于禁用rowid优化SQLite数据库的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 如何禁用rowid优化SQLite数据库

本文链接: https://www.lsjlt.com/news/36153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql中的注释符号有哪些
    sql 中,注释符号用于增强代码可读性。单行注释用 "--" 表示,多行注释用 "/" 和 "/" 标记。特殊注释包括 mysql 中的 "#" 和 sql server 中的 "rem...
    99+
    2024-05-15
    mysql
  • sql中添加记录的命令
    在 sql 中,添加新记录的命令是 insert。语法如下:insert into (column1, column2, ..., columnn) values (value1, v...
    99+
    2024-05-15
  • sql中=和in的区别
    sql 中 = 用于比较两个值是否相等,而 in 用于检查一个值是否包含在值列表中。= 只比较两个值,而 in 可以将一个值与多个值进行比较。性能方面,= 通常比 in 更快,但对于较大...
    99+
    2024-05-15
  • 怎么在sql中查询数据
    sql 中查询数据的语法:select 列名from 表名where 条件order by 排序字段 如何在 SQL 中查询数据 SQL(结构化查询语言)是一种用于...
    99+
    2024-05-15
    排列
  • sql中左关联和右关联哪个快
    左连接通常比右连接更快,因为它首先连接左边表的所有行,然后搜索匹配的右边表行,而右连接则相反,从右边表开始连接。在左边表较大或大多数行有匹配的情况下使用左连接效果更佳。 SQL 中左连...
    99+
    2024-05-15
  • sql中mod函数的作用
    sql 中的 mod 函数用于计算两个数字之间的余数。它返回除数 y 除以被除数 x 后剩下的余数。 SQL 中 MOD 函数的作用 MOD 函数是一个 SQL 函数,用于计算两个数字...
    99+
    2024-05-15
  • sql中check的所有用法
    sql 中 check 约束用于在表中定义数据完整性规则,包括:值范围检查:定义列值的范围。唯一性检查:强制列值唯一性。数据类型验证:验证插入值是否属于特定数据类型。条件表达式:包含复杂...
    99+
    2024-05-15
  • sql中cpno是什么意思
    cpno在sql中表示“客户电话号码”,用于存储客户的联系方式。其用途包括:客户识别、联系管理、营销活动和业务分析。cpno字段的类型通常是varchar或char,具体取决于所需的存储...
    99+
    2024-05-15
  • sql中的替换函数有哪些
    sql 提供了多种替换函数,用于替换字符串中的指定字符或字符序列:replace() 替换所有指定子字符串为新字符串。translate() 替换字符为指定字符序列中的对应字符。conc...
    99+
    2024-05-15
  • sql中的替换函数怎么用
    sql中的替换函数用于在字符串中查找和替换文本,最常用的函数是replace(),语法为replace(string, search_string, replacement_string...
    99+
    2024-05-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作