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;

相关推荐