Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131

Deprecated: A função WP_Dependencies->add_data() foi chamada com um argumento que está obsoleto desde a versão 6.9.0! Os comentários condicionais do IE são ignorados por todos os navegadores compatíveis. in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131
Reordenando campos em tabela no MySQL

Reordenando campos em tabela no MySQL

As tabelas de um modo geral seguem uma ordem lógica quando falamos de seus atributos (campos), por exemplo, em uma tabela de produtos é comum termos o atributo qtd após o nome. Mas nem sempre nos deparamos com estruturas assim, e ai, como alterar a estrutura de forma fácil, e o mais importante, sem perder os dados ali já registrados?

No MySQL isso é tarefa fácil com o uso do comando Alter Table (Change). 
Propomos então o seguinte cenário:

Tabela: produto:

 create table produto(   
  id_produto bigint not null auto_increment,  
  qtd int not null default 0,  
  nome varchar(50),  
  primary key (id_produto)  
 );  

 

Inserindo registros:

 insert into produto (id_produto, qtd, nome)  
 values  
  (null, 10, 'Produto A'),  
  (null, 20, 'Produto B'),  
  (null, 30, 'Produto C') ;  

Consultando os dados registrados:

 select  *  
 from produto ;  

id_produto  qtd     nome
———-  ——  ———–
1           10      Produto A
2           20      Produto B
3           30      Produto C

Vamos alterar a posição do atributo qtd, deixando-o após o nome:

 alter table produto  
  change column nome nome varchar (50) null default null after id_produto ;  

Feito a alteração, vamos consultar o resultado realizando um novo select na tabela:

 select  *  
 from produto ;  

id_produto  nome       qtd
———-  ———  ——–
1           Produto A  10
2           Produto B  20
3           Produto C  30

Veja que nosso objetivo foi alcançado com sucesso, o campo esta na posição desejada e, os dados permanecem da mesma forma antes da alteração.

Explicando um ponto que pode deixar dúvidas é, o motivo do campo nome ter sido especificado duas vezes é devido ao fato da sintaxe ser:

CHANGE [COLUMN] old_col_name new_col_name

Traduzindo, o nome do campo antigo (atual) e nome do novo campo, caso seja necessário renomeá-lo.

Agora, como toda alteração gera impactos direta ou indiretamente, alerto quanto a importância de verificar a necessidade de replicar essa mudança na camada aplicação.

Por mais útil e fácil que seja a alteração, ela  não é vista como necessária por muitos DBA`s, pois, a ordem dos atributos podem ser manipulada facilmente através de select, eu particularmente prefiro a mudança de estrutura, e você?
Um grande abraço e até a próxima.

2 comentários em “Reordenando campos em tabela no MySQL”

  1. Olá "Anônimo",

    Este é um assunto que já foi alvo de algumas discussões pela web, te adiantando, não é possível realizar no PostgreSQL a mesma ação que exemplifiquei neste artigo, a alternativa é:

    "Se ainda não estiver satisfeito pois quer suas tabelas "bonitinhas" e organizadas:
    1. CREATE TABLE novo_nome AS SELECT id,cpf,nome FROM sua_tabela;
    2. DROP TABLE sua_tabela;
    3. ALTER TABLE novo_nome RENAME TO sua_tabela;
    Osvaldo (Na lista PostgreSQL-Brasil)."

    Veja mais sobre o assunto em:

    http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Ap%C3%AAndices/Dicas_Pr%C3%A1ticas_de_uso_do_SQL

    http://wiki.postgresql.org/wiki/Alter_column_position

    Espero ter ajudado, grande abraço.

Deixe um comentário