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:
- Remove todos os registros
- Reinicia contadores (auto increment)
- 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.
