Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

maxcarvalho

[Resolvido] Zerar um auto-increment em MySQL ?

Recommended Posts

Prezados(as), Estou diante da seguinte situação : tenho uma tabela em MySQL, contendo um campo "int(6)" que é auto-increment. Gostaria de saber como faço para zerar o valor desse campo ? Existe algum comando ou função pre-definida que implemente esta funcionalidade ? Se alguém puder me ajudar, antecipadamente agradece Max W. V. Carvalho maxcarvalho@yahoo.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso:

ALTER TABLE teste1 CHANGE cod cod INT( 11 ) DEFAULT NULL AUTO_INCREMENT

ou isso:

ALTER TABLE tabela AUTO_INCREMENT = 1;

Depois responde aí se funcionou e qual das duas usou ! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado walace, Lamento infomar qu e nenhuma das sugestões propostas funcionou aqui. Por acaso não está faltando algo ? Só para relembar, a minha dúvida é : como resetar(zerar) um campoauto-increment no MySQL ? Será que não existe um comando do tipo : DROP nome-do-campo-autoincrement ON nome-tabela ou SET

Compartilhar este post


Link para o post
Compartilhar em outros sites

naum entedi pq não funcionou, uso a 2ª opção sempre q necessário e nunca falhou...qual o tipo de tabela você está utilizando? MyISAM ou InnoDB?Se for o Inno, executa o alter table, e reinicia o serviço do mysql.agora o MyISAM deve funcionar, a não ser é claro que este procedimento implique em conflito com registros existentes (se houver né).d qquer forma, diz ae como você fez p/ galera ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Walace, É um amigo meu de trabalho que está com a dúvida. Eu que não havia entendido direito qual era a dúvida dele. Estamos usando tabelas InnoDB. Eu consegui, depois de algumas tentativas, "dropar" o auto-increment, usandoaquela solução que você propôs usando o CHANGE. Em relação a esta dúvida anterior - desabilitar o auto-incremento(que eu pensei ser a dúvida do meu amigo, mas a dúvida dele é a que segue abaixo), eu consegui elaborar dois scripts, um para desabilitar todos os auto-incrementos das tabelas e um outro para habilitar novamente os auto-incrementos. Os scripts estão usando o CHANGE por você proposto. Na realidade, a dúvida que ele tem é a seguinte : não é dropar, e sim, resetar(zerar, reiniciar a contagem do auto-increment). Tentei usar o comando SET INSERT_ID = 0 para zerar o contador do auto-incremento, mas não obtive sucesso. Só consigo setá-lo para valores maiores ou iguais a 1. Ah, tem outro problema também, me parece que o comando acima só funciona para a sessão corrente(talvez o termo mais adequado seja a "conexão" ativa no momento) ? Estou certo ou errado neste sentido ? Em suma, já consegui desabilitar(remover os auto-incrementos das definições das tabelas) e habilitar(colocá-los novamente nas definições), usando o CHANGE, mas ainda não estou sabendo usar o SET INSERT_ID. Tem como eu usar o comando acima na própria definição da tabela ou até mesmo em um script para que, quando eu vá criar o banco e das tabelas ele já pegue essa a configuração de auto-incremento que estiver previamente setada ? No mais, é só. Desculpe pelo tamanho da mensagem!!! []'s e bom carnaval Max Carvalho maxcarvalho@yahoo.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

thiago_web

 

Sei que a intenção foi boa mas este tópico é de 2005

 

Se deseja realmente ajudar o fórum responda em tópicos recentes onde os usuários ainda precisam da resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mário, estamos em 2011, e a mensagem do thiago_web me ajudou e muito.

 

Obrigado!

 

Abraços!

Ewaldo Quint

 

thiago_web

 

Sei que a intenção foi boa mas este tópico é de 2005

 

Se deseja realmente ajudar o fórum responda em tópicos recentes onde os usuários ainda precisam da resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mário, estamos em 2011, e a mensagem do thiago_web me ajudou e muito.

 

Obrigado!

 

Abraços!

Ewaldo Quint

 

thiago_web

 

Sei que a intenção foi boa mas este tópico é de 2005

 

Se deseja realmente ajudar o fórum responda em tópicos recentes onde os usuários ainda precisam da resposta

 

Somos 2... em 2011 e essa resposta do Thiago ajudou e muito... aateh ++...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa reviver o tópico mas creio que muita gente faz o seguinte:

 

usa um select `id` desc limit 1 pra pegar a nova id que sera cadastrada antes de cadastra-la, esse sistema funcionaria se nao fosse que ao deletar um id o auto-increment continua pulando akele que foi deletado (Por exemplo: ultima id eh 15 ai você deleta esse 15 e o sql continua inserindo 16 mas com seu codigo o ultimo id seria 15) entao minha solução pra isto foi:

 


1 - SETE O AUTOINCREMNT DA SUA TABELA PARA O ULTIMO ID, DEPOIS COLOQUE NO CODIGO DE REMOÇÃO DE REGISTROS


$query1 = mysql_query("delete from table WHERE `id`=?", array($_GET['remover'])); // DELETA O REGISTRO

$query2 = mysql_query("SELECT * FROM `table` ORDER BY `id` DESC LIMIT 1"); // PEGA O ULTIMO ID DA TABELA

$novo = mysql_fetchrow($query2); // FETCH 

$id = ($novo['id']-1);	// NOVO AUTO INCREMENT COMEÇARA DA ID ANTERIOR POIS A ULTIMA FOI REMOVIDA

$query3 = $db->execute("ALTER TABLE `table` AUTO_INCREMENT=$id"); // NOVO AUTO INCREMENT SERA SEMPRE O ULTIMO ID

 

EU SEI EU EXPLICO MUITO MAL, MAS SE VOCE CONSEGUIU ENTENDER SUA TABELA SEMPRE FICARA COM O AUTO-INCREMENT CERTO MESMO SE VOCE DELETAR O ULTIMO REGISTRO (COM PHP) E PODERA USAR SEMPRE O CODIGO DO SELECT ORDER BY ID DESC SEM PROBLEMAS...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, estou em 2012, e para mim, o melhor jeito é : "TRUNCATE TABLE nomeDaTablela;".

Espero ajudar alguém ^_^

 

Funcionou pra mim só para tabelas que não tem chaves estrangeiras. Prefiro remover todos os registros da tabela e executar em cada uma:

 

ALTER TABLE `nomeDaTabela` AUTO_INCREMENT = 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que esse tópico é bem velho, mas caso alguém esteja com problema parecido e acabe chegando nele em suas buscar pelo google:

 

Um dos motivos para - ALTER TABLE `nomeDaTabela` AUTO_INCREMENT = 1 - não funcionar talvez seja porque o valor que esteja usando para o novo AUTO_INCREMENT (que usei 1 no exemplo ai) seja menor que algum outro que ja esteja no seu BD, isto é, se você tem no Banco um registro com o 2798, não será possível setar para um valor menor por exemplo 2000.

 

CONTUDO, isso acontece em alguns casos que não descobri porque, não é minha especialidade o mysql, mas usando o mesmo sistema com os mesmos dados, em um caso consegui zerar e os dados seguiram a partir de 1, mas em outro só consegui usando um valor acima do registro maior que eu ta tinha no banco. Talvez seja versão do mysql, do administrador (no caso eu usava o mysqladmin);

 

Não sei como resolver em cada caso, mas vale como observação, assim cada um pode chegar a alguma conclusão, no meu caso por exemplo, onde não zerava tirei o auto_inc do campo, zerei todos e depois voltei como auto_inc e setei o inicial como 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Comigo funcionou assim:

 

1- Limpa a Tabela desejada.

 

2- executar o codigo abaixo.

ALTER TABLE tabela AUTO_INCREMENT = 1;

 

2013 E ME SALVOOOOOOOOOO KK

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para vc resetar uma tabela, ela precisa estar vazia..., pois os dados contém uma numeração com a ID auto-incrementada, então não tem como resetar com dados, a melhor forma de fazer isso apagar e recriar a sua tabela, de forma que não tenha a definição por default tipo: AUTO_INCREMENT=6, aconselho que vc modifique:

exemplo, se sua tabela estiver assim:


 

CREATE TABLE `usuario` (
  `usr_id` mediumint(5) unsigned NOT NULL AUTO_INCREMENT,
  `grp_id` smallint(2) unsigned NOT NULL,
  `crg_id` tinyint(2) unsigned DEFAULT NULL,
  `rvd_id` mediumint(5) unsigned DEFAULT NULL,
  `rde_id` smallint(3) unsigned DEFAULT NULL,
  `lja_id` mediumint(5) unsigned DEFAULT NULL,
  `dst_id` tinyint(2) unsigned DEFAULT NULL,
  `fll_id` tinyint(2) unsigned DEFAULT NULL,
  `usr_nome` varchar(100) COLLATE latin1_general_ci NOT NULL,
  `usr_cpf` char(11) COLLATE latin1_general_ci NOT NULL,
  `usr_rg` varchar(20) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_login` varchar(150) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_senha` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_lembrete` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_email` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_site` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_cep` char(9) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_endereco` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_numero` varchar(10) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_complemento` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_bairro` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_cidade` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_uf` char(2) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_telefone` varchar(17) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_celular` varchar(17) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_dt_nasc` date DEFAULT NULL,
  `usr_sexo` enum('M','F') COLLATE latin1_general_ci DEFAULT NULL,
  `usr_tamanho` enum('P','M','G','GG') COLLATE latin1_general_ci DEFAULT NULL,
  `usr_est_civil` varchar(13) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_escolaridade` varchar(19) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_renda` varchar(24) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_leu_regulamento` enum('S','N') COLLATE latin1_general_ci DEFAULT 'N',
  `usr_ativo` enum('S','N') COLLATE latin1_general_ci DEFAULT 'N',
  `usr_status` tinyint(1) unsigned DEFAULT '0',
  `usr_hash` char(32) COLLATE latin1_general_ci DEFAULT NULL,
  `usr_dt_cadastro` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `usr_dt_atualizacao` datetime DEFAULT NULL,
  `usr_alt_senha` date DEFAULT NULL,
  PRIMARY KEY (`usr_id`,`grp_id`),
  KEY `usuario_FKIndex3` (`fll_id`,`dst_id`),
  KEY `usuario_FKIndex4` (`lja_id`,`rde_id`),
  KEY `usuario_FKIndex5` (`rvd_id`),
  KEY `usuario_FKIndex6` (`crg_id`),
  KEY `usuario_FKIndex7` (`grp_id`)
) ENGINE=MyISAM AUTO_INCREMENT=45623 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

 

mude seu:

ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

do final:

para ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comigo funcionou, só tem um problema, coloquei o AUTO_INCREMENT com Valor 10000000000 e fui inserir dados na tabela agora não consigo conectar ao Banco de dados PhpMyadm, alguém tem alguma dica de como eu resolver isso ?

Obs: Estava apenas testando a capacidade do PhpMyadm, sempre faço isso nós programas e afins.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Comigo funcionou assim:

 

1- Limpa a Tabela desejada.

 

2- executar o codigo abaixo.

ALTER TABLE tabela AUTO_INCREMENT = 1;

 

Esse código funciona perfeitamente. :joia:

Obrigado. Eu precisava disso. Que pena que o administrador abaixo respondeu de uma forma que, ao que me parece, ele não entendeu bem o motivo disso aqui. Seu texto salvou e vai salvar muita gente. JHoje é 05/11/2013

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.