English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Comando ALTER MySQL

Quando precisamos modificar o nome da tabela de dados ou modificar os campos da tabela de dados, precisamos usar o comando ALTER do MySQL.

Antes de começar este capítulo do tutorial, vamos criar uma tabela, chamada: testalter_tbl.

root@host# mysql -u root -p senha;
Insira a senha:*******
mysql> use w3codebox;
Database changed
mysql> create table testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Campo | Tipo    | Nulo | Chave | Padrão | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | SIM  |     | NULL    |       |
| c     | char(1) | SIM  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 linhas no conjunto (0.00 sec)

Exclusão, adição ou modificação de campos da tabela

O seguinte comando usa a instrução ALTER e a cláusula DROP para excluir o campo i criado anteriormente na tabela:

mysql> ALTER TABLE testalter_tbl DROP i;

Se a tabela tiver apenas um campo restante, não é possível usar DROP para excluir o campo.

No MySQL, a cláusula ADD é usada para adicionar colunas à tabela, conforme o exemplo a seguir, adicionando o campo i à tabela testalter_tbl e definindo o tipo de dados:

mysql> ALTER TABLE testalter_tbl ADD i INT;

Após a execução do comando acima, o campo i será automaticamente adicionado ao final dos campos da tabela.

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Campo | Tipo    | Nulo | Chave | Padrão | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | SIM  |     | NULL    |       |
| i     | int(11) | SIM  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 linhas no conjunto (0.00 sec)

Se precisar especificar a posição do campo adicionado, você pode usar os termos-chave FIRST (definindo como a primeira coluna) e AFTER nome_do_campo (definindo após algum campo).

Tente a seguinte instrução ALTER TABLE, após a execução bem-sucedida, use SHOW COLUMNS para verificar as mudanças na estrutura da tabela:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

As palavras-chave FIRST e AFTER podem ser usadas nas cláusulas ADD e MODIFY, então, se precisar redefinir a posição do campo na tabela, você deve usar DROP para excluir o campo e, em seguida, ADD para adicioná-lo e definir a posição.

Modificação do tipo e nome do campo

Se precisar modificar o tipo e o nome do campo, você pode usar a cláusula MODIFY ou CHANGE na instrução ALTER.

Por exemplo, mude o tipo do campo c para CHAR(1) Mude para CHAR(10) Você pode executar o seguinte comando:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

A sintaxe é significativamente diferente ao usar a cláusula CHANGE. Após a palavra-chave CHANGE, vem o nome do campo que você deseja modificar, seguido do novo nome e tipo do campo. Tente o exemplo a seguir:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

Se você quiser modificar o campo j de BIGINT para INT, a instrução SQL será a seguinte:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

Efeito do ALTER TABLE em valores nulos e padrão

Quando você modificar um campo, você pode especificar se deve incluir um valor ou se deve definir um valor padrão.

No exemplo a seguir, especificamos o campo j como NOT NULL e com valor padrão100 。

mysql> ALTER TABLE testalter_tbl 
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Se você não definir um valor padrão, o MySQL configurará automaticamente o campo como NULL.

Modificar valor padrão do campo

Você pode usar o ALTER para modificar o valor padrão do campo, tente o exemplo a seguir:

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Campo | Tipo    | Nulo | Chave | Padrão | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | SIM  |     | NULL    |       |
| i     | int(11) | SIM  |     | 1000    |       |
+-------+---------+------+-----+---------+-------+
2 linhas no conjunto (0.00 sec)

Você também pode usar o comando ALTER com a cláusula DROP para excluir o valor padrão do campo, conforme o exemplo a seguir:

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Campo | Tipo    | Nulo | Chave | Padrão | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | SIM  |     | NULL    |       |
| i     | int(11) | SIM  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 linhas no conjunto (0.00 sec)
Alterando o Tipo de Tabela:

Para modificar o tipo de tabela de dados, você pode usar o comando ALTER com a cláusula TYPE. Tente o exemplo a seguir, onde alteramos o tipo da tabela testalter_tbl para MYISAM:

Atenção:Pode usar a instrução SHOW TABLE STATUS para verificar o tipo de tabela de dados.

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Name: testalter_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Opções de Criação:
        Comentário:
1 row in set (0.00 sec)

Modificação de Nome de Tabela

Se precisar modificar o nome da tabela de dados, você pode usar a cláusula RENAME na declaração ALTER TABLE para fazer isso.

Tente o seguinte exemplo para renomear a tabela de dados testalter_tbl para alter_tbl:

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

O comando ALTER também pode ser usado para criar e excluir índices de tabelas de dados MySQL, essa funcionalidade será abordada nos próximos capítulos.