SQLite e TRUNCATE: o equivalente real

O SQLite não implementa TRUNCATE TABLE.
O motivo é simples: a engine não separa essa operação como fazem bancos como MySQL.

Então a pergunta correta não é “cadê o TRUNCATE?”, e sim:

como reproduzir o efeito dele com precisão?


O que o TRUNCATE faz (na prática)

Em outros SGBDs, TRUNCATE:

  1. Remove todos os registros
  2. Reinicia contadores (auto increment)
  3. Mantém a estrutura da tabela

É isso que precisamos replicar.


Implementação correta no SQLite

DELETE FROM usuarios;

Isso resolve apenas metade do problema.

Agora o ponto que geralmente ignoram:

DELETE FROM sqlite_sequence WHERE name = 'usuarios';

Forma final (equivalente funcional)

DELETE FROM usuarios;
DELETE FROM sqlite_sequence WHERE name = 'usuarios';

Sem isso, você não tem TRUNCATE — tem só um DELETE.


Detalhe que separa amador de quem sabe o que está fazendo

O sqlite_sequence só existe para tabelas com AUTOINCREMENT:

id INTEGER PRIMARY KEY AUTOINCREMENT

Se sua tabela for:

id INTEGER PRIMARY KEY

Então:

  • não há garantia de sequência crescente
  • não há necessidade de reset manual
  • o segundo comando é inútil

Conclusão

SQLite não precisa de TRUNCATE.

O equivalente real é:

DELETE FROM tabela;
DELETE FROM sqlite_sequence WHERE name = 'tabela';

Se você não limpar o sqlite_sequence, não está simulando TRUNCATE — está só apagando dado.

Rolar para cima