SQLite清空表并将自增列归零
SQLite清空表并将自增列归零
作者:ZhuYanfeng发布:2012-09-2914:43分类:数据库阅读:3,567次抢沙发
SQL标准中有TRUNCATETABLE语句,用来清空表的所有内容。但SQLite不支持这个语句。在SQLite中直接使用“DELETEFROMTableName”就可以了。对于大多数DBMS来说,用DELETE不如用TRUNCATE速度快,因为TRUNCATE不用访问整个表,不用记录数据的变动。
SQLite虽然不支持TRUNCATE,但它对DELETE做了优化:“WhentheWHEREisomitted(略去)fromaDELETEstatementandthetablebeingdeletedhasnotriggers(触发器),SQLiteusesanoptimization(优化)toerasetheentiretablecontentwithouthavingtovisiteachrowofthetableindividually.This“truncate”optimizationmakesthedeleterunmuchfaster.”
通常在清空表的时候,还需要把自增列归零。在SQLite中定义自增列的方法如下:
CREATETABLETableName(idINTEGERPRIMARYKEYAUTOINCREMENT,...);
1
CREATETABLETableName(idINTEGERPRIMARYKEYAUTOINCREMENT,...);
当SQLite数据库中包含自增列时,会自动建立一个名为sqlite_sequence的表。这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。如果想把某个自增列的序号归零,只需要修改sqlite_sequence表就可以了。
UPDATEsqlite_sequenceSETseq=0WHEREname='TableName';
1
UPDATEsqlite_sequenceSETseq=0WHEREname='TableName';
也可以直接把该记录删掉:
DELETEFROMsqlite_sequenceWHEREname='TableName';
1
DELETEFROMsqlite_sequenceWHEREname='TableName';
要想将所有表的自增列都归零,直接清空sqlite_sequence表就可以了:
DELETEFROMsqlite_sequence;
1
DELETEFROMsqlite_sequence;