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.