Sintaxe ALTER TABLE


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. Leia "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 MariaDB tenha ignorado ou a sua modificação por uma das razões descritas em "Alteração de Especificações de Colunas". Por exemplo, se você tentar alterar uma coluna VARCHAR para CHAR, MariaDB 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 MariaDB 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.

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. Leia "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.

See Seção A.7.1, "Problemas com ALTER TABLE.".

Retornar