如何禁用rowid优化SQLite数据库

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

,
1.0介绍
默认情况下,SQLite数据库中的每一行都会有一个叫做rowid的特殊列,该列唯一标识数据库表中的某一行,然而如果在CREATE TABLE语句的后面添加没有rowid关键字,就会禁用rowid这一列。有时候省略掉rowid,能够带来空间和性能上的提升。
1.1语法
现在创建一个没有rowid的表,最直接的方式就是在创建表语句之后添加关键字没有rowid。例如:
创建表如果不存在wordcount (
,主键词文本,
,问整数
)没有ROWID。
如其他所有的SQL语法一样,关键字的大小写不敏感。如下的任何一种方式都可以接受:
没有ROWID, withoutrowid,没有ROWID。她们代表一个意思。
,
注意:如果表指定了没有ROWID属性,表必须指定主键。否则创建表的时候,会返回错误,错误的大体意思是指定没有ROWID的创建表语句缺少主键。
,
大多数情况下,ROWID和oid或者_rowid_代表一个意思。然而只有ROWID才可以出现在创建表的语句当中。
,
1.2兼容性
只有SQLite 3.8.2版本之后的程序才可以使用没有ROWID关键字。早期版本的SQLite打开携带没有ROWID属性的表,将会返回一个畸形的数据库模式的错误。
,
1.3怪癖(特殊性)
迄今为止,没有ROWID只能够被SQLite数据库使用,其他的数据库引擎并没有兼容该关键字。在正统的系统中,即使没有没有ROWID关键字,所有的表也应该表现的和没有ROWID的效果一样。然而,SQLite在一开始被设计的时候,就采用整型的ROWID来简化实现的方式。这种方法表现很好很多年了。但是随着SQLite的需求的增长,(需要表的主键确实correspondto底层的行键变得更加严重)对于表指定主键属性变得更加迫切,因此和rowkey的矛盾更加尖锐。为了兼容过去的已经被使用了很久很久的程序,因此没有ROWID的概念终于被添加到SQLite中,(没有ROWID概念是为了满足needwithout打破向后兼容性的数十亿SQLite databasesalready在使用时(大约2013年)。)
为了无缝的兼容过去成千上万的程序,没有ROWID的概念被添加到SQLite中。
2.0与携带ROWID表不同之处
没有ROWID是一个优化选项。她没有提供任何新的特性(capablilities)。操作携带ROWID表和操作不携带ROWID的表,使用的都是相同的语法。唯一的优点是节省磁盘空间,并且比普通的表快一些。
,
多数情况下,携带ROWID表和不携带ROWID表是可以互换的(互换)。但是没有ROWID表存在一些限制,而这些限制是普通的ROWID表不具备的。
,
1。指定了没有ROWID的表必须指定PRIMARYKEY,否则建表失败
2指定了没有ROWID的表不能够指定INTEGERPRIMARY KEY.In普通表,“整数主要KEY"意味着thecolumn rowid的别名。但由于没有rowid WITHOUTROWID表,特殊意义不再适用。一个“整数PRIMARYKEY"列在一个没有ROWID表工作原理就像一个“INT PRIMARYKEY"列在一个普通的表:integeraffinity主键。
3指定了没有ROWID的表不能使用自动增量关键字

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

如何禁用rowid优化SQLite数据库