Sqlite 学习笔记(一)

Sqlite 学习笔记(一),第1张

概述SQLite清空表并将自增列归零SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容。但SQLite不支持这个语句。在SQLite中直接使用 DELETE FROM TableName 就可以了。对于大多数DBMS来说,用DELETE不如用TRUNCATE 速度快,因为TRUNCATE 不用访问整个表,不用记录数据的变动。SQLite虽然不支持TRUNCATE,但它对DE
sqlite清空表并将自增列归零sql标准中有TruncATE table语句,用来清空表的所有内容。但sqlite不支持这个语句。在sqlite中直接使用 DELETE FROM tablename 就可以了。对于大多数DBMS来说,用DELETE不如用TruncATE 速度快,因为TruncATE 不用访问整个表,不用记录数据的变动。sqlite虽然不支持TruncATE,但它对DELETE做了优化:通常在清空表的时候,还需要把自增列归零。在sqlite中定义自增列的方法如下:CREATE table tablename ( ID INTEGER PRIMARY KEY autoINCREMENT,name varchar,type Integer );当sqlite数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。如果想把某个自增列的序号归零,只需要修改 sqlite_sequence表就可以了。UPDATE sqlite_sequence SET seq = 0 WHERE name='tablename';也可以直接把该记录删掉:		 	   DELETE FROM sqlite_sequence WHERE name='tablename';要想将所有表的自增列都归零,直接清空sqlite_sequence表就可以了:DELETE FROM 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。比如,我们设计一个元记录表:Create table Meta_struct(ID INTEGER PRIMARY KEY autoINCREMENT,type Integer);然后,定义一个一级表,来描述其它表的结构:Create table Meta_table(tableID INTEGER,table_fIEld integer)最后,我们的应用可以根据这个一级表来产生实际使用的二级表。这样为保证兼容性Meta_struct中的ID必须是唯一的,如果有字段被删除,也不能重复使用这个字段的ID值,不然,在数据库合并时,一级表和二级表就会混乱。所以Meta_struct表中的主键只能使用自增长字段,而不能用rowID。第三,使用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,用户可以看到,并可以用使用Update、Delete和Insert *** 作,但不建议这么使用,这会让引擎混乱。如果使用rowID,也会有这么一个内部表,用户可以维护rowID值,但看不到。
转载于:http://www.ifunsion.com/archives/2771
参阅:http://www.cnblogs.com/peIDa/archive/2008/11/29/1343832.HTML
总结

以上是内存溢出为你收集整理的Sqlite 学习笔记(一)全部内容,希望文章能够帮你解决Sqlite 学习笔记(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/1172852.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存