MySQL - Comando ALTER

O MySQL ALTER O comando é muito útil quando você deseja alterar o nome de sua tabela, qualquer campo da tabela ou se deseja adicionar ou excluir uma coluna existente em uma tabela.

Vamos começar com a criação de uma mesa chamada testalter_tbl.

[email protected]# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
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;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   i   | int(11) | YES  |     |   NULL  |       |
|   c   | char(1) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Descartando, Adicionando ou Reposicionando uma Coluna

Se você quiser remover uma coluna i existente da tabela MySQL acima, então você usará o DROP cláusula junto com a ALTER comando como mostrado abaixo -

mysql> ALTER TABLE testalter_tbl  DROP i;

UMA DROP A cláusula não funcionará se a coluna for a única que restou na tabela.

Para adicionar uma coluna, use ADD e especifique a definição da coluna. A seguinte declaração restaura oi coluna para o testalter_tbl -

mysql> ALTER TABLE testalter_tbl ADD i INT;

Depois de emitir esta declaração, testalter conterá as mesmas duas colunas que tinha quando você criou a tabela pela primeira vez, mas não terá a mesma estrutura. Isso ocorre porque há novas colunas adicionadas ao final da tabela por padrão. Então, emborai originalmente era a primeira coluna em mytbl, agora é a última.

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Para indicar que você deseja uma coluna em uma posição específica dentro da tabela, use FIRST para torná-la a primeira coluna ou AFTER col_name para indicar que a nova coluna deve ser colocada após o nome_coluna.

Tente o seguinte ALTER TABLE declarações, usando SHOW COLUMNS depois de cada um para ver o efeito que cada um tem -

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;

Os especificadores FIRST e AFTER funcionam apenas com a cláusula ADD. Isso significa que se você deseja reposicionar uma coluna existente dentro de uma tabela, você deve primeiroDROP isso e então ADD na nova posição.

Alterando (mudando) uma definição de coluna ou um nome

Para alterar a definição de uma coluna, use MODIFY ou CHANGE cláusula junto com o comando ALTER.

Por exemplo, para alterar a coluna c de CHAR (1) a CHAR (10), você pode usar o seguinte comando -

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

Com CHANGE, a sintaxe é um pouco diferente. Após a palavra-chave CHANGE, você nomeia a coluna que deseja alterar e, a seguir, especifica a nova definição, que inclui o novo nome.

Experimente o seguinte exemplo -

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

Se você agora usa CHANGE para converter j de BIGINT de volta a INT sem alterar o nome da coluna, a instrução será como mostrado abaixo -

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

The Effect of ALTER TABLE on Null and Default Value Attributes- Ao MODIFICAR ou ALTERAR uma coluna, você também pode especificar se a coluna pode ou não conter valores NULL e qual é seu valor padrão. Na verdade, se você não fizer isso, o MySQL atribuirá valores automaticamente para esses atributos.

O seguinte bloco de código é um exemplo, onde o NOT NULL coluna terá o valor 100 por padrão.

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

Se você não usar o comando acima, o MySQL preencherá os valores NULL em todas as colunas.

Alterando (mudando) o valor padrão de uma coluna

Você pode alterar um valor padrão para qualquer coluna usando o ALTER comando.

Experimente o seguinte exemplo.

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   1000  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Você pode remover a restrição padrão de qualquer coluna usando a cláusula DROP junto com o ALTER comando.

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field |  Type   | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
|   c   | char(1) | YES  |     |   NULL  |       |
|   i   | int(11) | YES  |     |   NULL  |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Alterando (mudando) um tipo de tabela

Você pode usar um tipo de tabela usando o TYPEcláusula junto com o comando ALTER. Experimente o seguinte exemplo para mudar otestalter_tbl para MYISAM tipo de mesa.

Para descobrir o tipo atual de uma tabela, use o SHOW TABLE STATUS declaração.

mysql> ALTER TABLE testalter_tbl TYPE = 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
 Create_options:
        Comment:
1 row in set (0.00 sec)

Renomeando (Alterando) uma Tabela

Para renomear uma tabela, use o RENAME opção do ALTER TABLE declaração.

Experimente o seguinte exemplo para renomear testalter_tbl para alter_tbl.

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

Você pode usar o comando ALTER para criar e soltar o comando INDEX em um arquivo MySQL. Discutiremos em detalhes sobre esse comando no próximo capítulo.