Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala gente :)
Tenho uma tabela relacional com três campos:
id int(11) AUTO_INCREMENT (PRIMARY_KEY)
categoria_id int(11)
pacote_id int(11)
E suponhamos que eu tenha três registros nelas com IDs iguais a 3, 8, e 9..
Eu preciso reorganizar esses IDs para o menor valor possível... voltando a ser 1, 2 e 3.
Existe uma forma de fazer isso?
Ps.: Eu não preciso me preocupar em manter a ordem dos registros ou o valor atual dos IDs.
Só pra ilustrar com outro exemplo, suponto que eu tenha uma tabela assim (o primeiro valor é a coluna ID):
2, TiuTalk, blablabla
4, Fulano, lalala
10, Ciclano, tralalá
Queria que ela ficasse assim:
1, TiuTalk, blablabla
2, Fulano, lalala
3, Ciclano, tralalá
Abraços
Sim... é uma tabela de relacionamento entre duas outras tabelas...
Eu preciso que eles sejam diminuidos pq o campo é INT(11), eu sei q posso aumentar o número máximo de caracteres, mas sei que cedo ou tarde eu vou chegar no limite já que quase todos os registros são re-inseridos com REPLACE INTO todo dia e tão crescendo absurdamente.
Pode só ser uma preocupação boba, mas queria saber como fazer, mesmo que eu não o faça. :P
entao..
até aonde vai meu conhecimento...
você teria que criar essa tabela de relacionamento, sem essa PK de auto incremento..
e com uma PK composta com os dois campos...
mais ou menos assim:
CREATE TABLE `rel_categoria_pacote` (
`categoria_id` INT UNSIGNED NOT NULL,
`pacote_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`categoria_id`, `pacote_id`)
)
ENGINE = InnoDB;
e com suas devidas FKs.
Teoricamente, dessa forma, você não precisa se preocupar com o valor do auto incremento que estava se preocupando antes,
a tabela será um pouco menor e está garantindo a integridade dos dados, já que a chave primária composta garante que não haverá relacionamentos duplicados entre pacores e categorias.
Hmm.. Interessantíssimo!
A tabela precisa ser InnoDB pra poder fazer uma PK "dupla"? Ou rolatira também com MyISAM? :D
~Til Talk~
11 permite indexar até 99.999.999 que não é pouca coisa.Precisa mesmo não ter "banguelas" ?
Recriar estas tabelas vai dar trabalho, acho que talvez seja melhor :
1) Ver pq se está perdendo as faixa de valores e se possível corrigir
2) Pensar uma rotina que aproveitasse as "banguelas" , caso seja possível pois pode haver problemas de datas x registros.
Assim ao se inserir um novo registro o '1' poderia ser aproveitado usando o seu exemplo.
Mas caso queira reindexar o algoritmo básico é (grosso modo)
Desligar todas as pk´s fk´s e uk´s que envolvam este campo
Enquanto houver "banguelas" faça
__Obter o registro mais baixo não migrado
__Verificar se existe registro mais baixo que ele livre
__Alterar este registro em todas as tabelas envolvidas.
Fim enquanto
>
Hmm.. Interessantíssimo!
A tabela precisa ser InnoDB pra poder fazer uma PK "dupla"? Ou rolatira também com MyISAM? :D
A PK Composta funciona em tabelas do tipo MyISAM também, eu sugeri InnoDB por causa das FKS =]
me diz uma coisa, isso é uma tabela de relacionamento?
pq você precisa que os valores sejam "diminuídos"?