ALTER [IGNORE] TABLE nome_tbl especificação_alter [, especificação_alter ...]
especificação_alter:
    ADD [COLUMN] definição_create [FIRST | AFTER nome_coluna ]
  | ADD [COLUMN] (definição_create, definição_create,...)
  | ADD INDEX [nome_indice] (index_nome_col,...)
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...)
  | ADD [CONSTRAINT [symbol]] UNIQUE [index_name] (index_col_name,...)
  | ADD FULLTEXT [index_name] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
            [definição_referncia]
  | ALTER [COLUMN] nome_col {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] nome_col_antigo definição_create
               [FIRST | AFTER nome_coluna]
  | MODIFY [COLUMN] definição_create [FIRST | AFTER nome_coluna]
  | DROP [COLUMN] nome_col
  | DROP PRIMARY KEY
  | DROP INDEX nome_indice
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] nome_nova_tbl
  | ORDER BY col
  | CHARACTER SET character_set_name [COLLATE collation_name]
  |    table_options
        ALTER TABLE lhe permite alterar a estrutura
        da tabela existente. Por exemplo, você pode adicionar ou
        deletar colunas, criar ou remover índices, alterar o tipo de
        coluna existentes, ou renomear coluna ou tabelas. Você também
        pode alterar o comentário para a tabela e tipo de tabela. See
        Secção 6.5.3, “Sintaxe CREATE TABLE”.
      
        Se você utilizar ALTER TABLE para alterar a
        especificação da coluna, mas DESCRIBE
        tbl_name indicar que a sua coluna não foi alterada,
        é possível que o MySQL tenha ignorado ou a sua modificação
        por uma das razões descritas em
        Secção 6.5.3.1, “Alteração de Especificações de Colunas”. Por exemplo, se você
        tentar alterar uma coluna VARCHAR para
        CHAR, MySQL ainda usará
        VARCHAR se a tabela conter outras colunas de
        tamanho variável.
      
        ALTER TABLE funciona fazendo uma cópia
        temporária da tabela original. A alteração é realizada na
        cópia, assim a tabela original é deletada e a nova tabela é
        renomeada. Isto é feito de tal forma que todas as
        desnecessáriaatualizações são automaticamente redirecionadas
        para a nova tabela sem nenhuma atualização errada. Enquanto o
        ALTER TABLE é executado, a tabela original
        pode ser lida por outros clientes. Atualizações e escrita na
        tabela são guardadas até a nova tabela estar pronta.
      
        Note que se você utilizar qualquer outra opção de
        ALTER TABLE, exceto
        RENAME, o MySQL irá sempre criar um a tabela
        temporária, mesmo se os dados não precisarem realmente serem
        copiados (como quando você altera o nome de uma coluna).
        Planejamos corrigir isto no futuro, mas como não se faz
        ALTER TABLE com tanta frequência, isto não
        é de alta prioridade em nosso TO DO. Para tabelas MyISAM, vOcê
        pode aumentar a velocidade na parte da recriação dos índices
        (que a parte mais lenta do processo recriação) atribuindo um
        alto valor à variável
        myisam_sort_buffer_size.
      
            Para utilizar ALTER TABLE, você precisa
            dos privilégios ALTER,
            INSERT e CREATE na
            tabela.
          
            IGNORE é uma extensão do MySQL ao
            SQL-92. Ele controla como o ALTER TABLE
            funciona se houver duplicação em chaves únicas na nova
            tabela. Se IGNORE não é especificado, a
            cópia é abortada e retornada. Se IGNORE
            for especificado, para linhas com duplicatas em chaves
            únicas, somente a primera linha é usada; as outras são
            deletadas.
          
            Você pode executar múltiplas cláusulas
            ADD, ALTER,
            DROP e CHANGE em uma
            única instrução ALTER TABLE. Esta é
            uma extensão do MySQL ao SQL-92, que permite paenas uma
            cláusula de cada por instrução ALTER
            TABLE.
          
            CHANGE col_name, DROP
            col_name, e DROP INDEX são
            extensões do MySQL ao SQL-92.
          
            MODIFY é uma extensão do Oracle para
            ALTER TABLE.
          
            A palavra opcional COLUMN é uma palavra
            puramente desnecessária e pode ser omitida.
          
            Se você utilizar ALTER TABLE nome_tbl RENAME TO
            novo_nome sem nenhuma outra opção, MySQL
            simplesmente renomeia os arquivos correspondentes a tabela
            nome_tbl. Não há necessidade de se
            criar uma tabela temporária. See
            Secção 6.5.5, “Sintaxe RENAME TABLE”.
          
            Cláusulas definição_create usam a
            mesma sintaxe para ADD e
            CHANGE assim como para CREATE
            TABLE. Note que a sintaxe inclui o nome da coluna,
            não apenas o tipo da coluna. See
            Secção 6.5.3, “Sintaxe CREATE TABLE”.
          
            Você pode renomear ma coluna usando uma cláusula
            CHANGE nome_col_antiga
            definições_create. Para tal, especifique o nome
            das colunas antiga e da nome e o tipo que a coluna atual
            possui. Por exemplo, para renomear uma coluna
            INTEGER de a para
            b, faça assim:
          
mysql> ALTER TABLE t1 CHANGE a b INTEGER;
            Se você quiser mudar um tipo de coluna, mas não o nome, a
            sintaxe CHANGE ainda exige dois nomes de
            colunas, mesmo que sejam o mesmo. Por exemplo:
          
mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
            No entanto, como no MySQL Versão 3.22.16a, você também
            pode utilizar MODIFY para alterar um tipo
            de coluna sem renomeá-lo:
          
mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
            Se você utilizar CHANGE ou
            MODIFY para reduzir uma coluna na qual
            exista um índice em parte da coluna (por exemplo, se você
            tiver um índice nos primeiros 10 caracteres de uma coluna
            VARCHAR), você não poderá reduzir a
            coluna para um tamanho menor que o número de caracteres
            indexados.
          
            Quando você altera um tipo de coluna usando
            CHANGE ou MODIFY,
            erter os dados para o novo tipo da melhor forma possível.
          
            No MySQL Versão 3.22 ou posterior você pode utilizar
            FIRST ou ADD ... AFTER
            nome_col para aadicionar uma coluna em uma
            posição específica na linha da tabela. O padrão é
            adicionar a coluna no fim. A partir do MySQL Versão 4.0.1,
            você pode também utilizar as palavras-chave
            FIRST e AFTER em
            CHANGE ou MODIFY.
          
            ALTER COLUMN especifica um novo valor
            padrão para uma coluna ou remover o valor padrão antigo.
            Se o padrão antigo é removido e a coluna pode ser
            NULL, o novo padrão é
            NULL. Se a coluna não pode ser
            NULL, MySQL atribui um valor padrão,
            como descrito em Secção 6.5.3, “Sintaxe CREATE TABLE”.
          
            DROP INDEX remove um índice. Esta é uma
            extensão do MySQL ao SQL-92. See
            Secção 6.5.8, “Sintaxe DROP INDEX”.
          
Se colunas forem removidas de uma tabela, as colunas também são removidas de qualquer índice do qual eles fazem parte. Se todas as colunas que compõe um índice são excluídas, o índice também é excluído.
            Se uma tabela contém apenas uma coluna, a coluna não pode
            ser excluída. Se o que você pretende é remover a tabela,
            use DROP TABLE.
          
            DROP PRIMARY KEY deleta o índice
            primário. Se tal índice não existe, ele apaga o prmeiro
            índice único (UNIQUE) na tabela. (MySQL
            marca a primeira chave única (UNIQUE)
            como PRIMARY KEY se nenhuma
            PRIMARY KEY foi especificada
            explicitamente.)
          
            Se você adicionar UNIQUE INDEX ou
            PRIMARY KEY a uma tabela, elas são
            armazenadas antes de qualquer índice não
            UNIQUE para que possa detectar cahves
            duplicadas o mais rápido possível.
          
            ORDER BY lhe permite criar a nova tabela
            com as linhas em uma ordem específica. Note que a tabela
            não permanecerá nesta ordem depois de insrções e
            deleções. Em algunas casos, isto pode tornar a ordenação
            mais para o MySQL se a tabela estiver ordenada pela coluna
            que você escolheu. Esta opção é útil principalmente
            quando você sabe qeu na maioria das vezes você irá
            inserir os registros em certa ordem; utilizando esta opção
            depois de grandes mudanças na tabela, você obterá melhor
            desempenho.
          
            Se você utilizar ALTER TABLE em uma
            tabela MyISAM, todos os índices que não
            são únicos são criados em um grupo separado (como em
            REPAIR). Isto deve tornar ALTER
            TABLE muito mais rápido quando você tiver
            vários índices.
          
            A partir do MySQL 4.0 o
            recurso acima pode ser ativado explicitamente.
            ALTER TABLE ... DISABLE KEYS faz o MySQL
            parar de atualizar chaves que não são únicas em tabelas
            MyISAM. ALTER TABLE ... ENABLE
            KEYS deve ser usado para recriar índices
            perdidos. Como o MySQL faz isso com um algoritmo especial
            que é muito mais rápido que inserir chaves uma a uma,
            disabilitar chaves podem trazer um aumento de velocidade
            considerável em inserções volumosas.
          
            
            Com a função mysql_info() da API C,
            você pode saber quantos registros foram copiados, e (quando
            IGNORE for usado) quantos registros foram
            deletados devido a duplicação de valores de chaves
            únicas.
          
            
            
            As cláusulas FOREIGN KEY,
            CHECK e REFERENCES
            não fazem nada, exceto para tipos de tabela InnoDB que
            suportam ... ADD [CONSTRAINT [symbol]] FOREIGN KEY
            (...) REFERENCES ... (...) e ... DROP
            FOREIGN KEY .... See
            Secção 7.5.5.2, “Restrições FOREIGN KEY”. A sintaxe
            para outros tipos de tabela só é fornecido para
            comptibilidade, para tornar fácil portar o código de outro
            servidor SQL e executar aplicações que criam tabelasd com
            referências. See Secção 1.8.4, “Diferenças do MySQL em Comparação com o SQL-92”.
          
            ALTER TABLE ignora as opções de tabela
            DATA DIRECTORY e INDEX
            DIRECTORY.
          
Se você quiser alterar todas as colunas CHAR/VARCHAR/TEXT para um novo conjunto de caracteres (por exemplo, depois de atualizar do MySQL 4.0.x para o 4.1.1) você pode fazer:
ALTER TABLE table_name CHARACTER SET character_set_name;
            Note que o seguinte comando só irá alterar o
            default character set para uma tabela:
          
ALTER TABLE table_name DEFAULT CHARACTER SET character_set_name;
            O default character set é o conjunto de
            caracteres que é usado se você não especificar o conjunto
            de caracteres para uma nova coluna que você adicionar a
            tabela (por exemplo com ALTER TABLE ... ADD
            coluna).
          
        Aqui temos um exemplo que mostra alguns dos usos de
        ALTER TABLE. Nós começamos com uma tabela
        t1 que é crida como mostrado aqui:
      
mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
        Para renomear a tabela de t1 para
        t2:
      
mysql> ALTER TABLE t1 RENAME t2;
        Para alterar a coluna a de
        INTEGER para TINYINT NOT
        NULL (deixando o mesmo nome), e alterar a coluna
        b de CHAR(10) para
        CHAR(20) e renomeá-la de
        b para c:
      
mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
        Para adicionar um nova coluna TIMESTAMP
        chamada d:
      
mysql> ALTER TABLE t2 ADD d TIMESTAMP;
        Para adicionar um índice na coluna d, e
        tornar a colua a a chave primária:
      
mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
        Para remover a coluna c:
      
mysql> ALTER TABLE t2 DROP COLUMN c;
        Para adiciomar um nova coluna inteira
        AUTO_INCREMENT chamada c:
      
mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
           ADD INDEX (c);
        Note que nós indexamos c, porque colunas
        AUTO_INCREMENT devem ser indexadas e também
        por isso declaramos c como NOT
        NULL, pois colunas indexadas não podem ser
        NULL.
      
        Quando você adicionar uma coluna
        AUTO_INCREMENT, valores de coluna são
        preenchidos com sequência de números automaticamente para
        você. Você pode definir o primeiro número da sequência
        executando SET INSERT_ID=valor antes de
        ALTER TABLE ou usando a opção de tabela
        AUTO_INCREMENT=valor. See
        Secção 5.5.6, “Sintaxe de SET”.
      
        Com tabelas MyISAM tables, se você não alterar a coluna
        AUTO_INCREMENT, a sequência de números não
        será afetada. Se você excluir uma coluna
        AUTO_INCREMENT e adicionar outra coluna
        AUTO_INCREMENT, a numeração iniciará a
        partir do 1 novamente.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

