O que está errado na estrutura deste trigger?

Olá. Eu estou começando a usar triggers no Mysql. Eu queria criar um trigger que dê um reset no AUTO_INCREMENT da tabela assim que a mesma não possua nenhum registro. Então eu fiz a seguinte estrutura:

delimiter $$
create trigger reset_auto_increment after delete on usuarios
begin
if (SELECT COUNT(*) FROM usuarios == 0) THEN 
ALTER TABLE usuarios AUTO_INCREMENT = 1;
end if;
end $$
delimiter ;

Porém eu estou recebendo uma mensagem de erro de sintaxe. Alguém sabe me explicar o que eu fiz de errado?

Thallysson, seu select esta incorreto:

Troque

if (SELECT COUNT(*) FROM usuarios == 0) THEN

Por

if (SELECT COUNT(*) FROM usuarios) = 0 THEN

No entanto, você não conseguirá fazer o que deseja, pois, você receberá a seguinte mensagem:

Explicit or implicit commit is not allowed in stored function or trigger.

Ou seja, não será possível fazer via trigger diretamente, veja se consegue fazer chamando uma sp em que a sp faz o alter table.

Espero ter ajudado.

_ _
Fabiano Abreu
Papo SQL

1 curtida

Valeu pela ajuda. Eu nunca havia utilizado estruturas condicionais no Mysql, é bom conhecer a estrutura. Eu queria que fosse em um trigger mesmo. Porque vai ser útil só no desenvolvimento, já que eu deleto todos os registros as vezes, e depois que eu tiver o cliente pronto, não farei mais isso. Eu notei que se eu registrar um usuário e a id dele for 1 (AUTO_INCREMENT) e eu deleta-lo, quando eu cadastrar outro usuário, a id dele vai ser 2 mesmo sendo o único registro, e achei que isso ficou muito feio. Mas se não é possível tranquilo.