MySQLi - Comando ALTER
MySQLi ALTER O comando é muito útil quando você deseja alterar um 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 tabela chamada tutorials_alter.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_alter
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.27 sec)
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Descartando, Adicionando ou Reposicionando uma Coluna
Suponha que você queira eliminar uma coluna existente i da tabela MySQLi acima, então você usará DROP cláusula junto com ALTER comando da seguinte forma -
mysql> ALTER TABLE tutorials_alter DROP i;
UMA DROP não funcionará se a coluna for a única que resta na tabela.
Para adicionar uma coluna, use ADD e especifique a definição da coluna. A seguinte declaração restaura oi coluna para tutorials_alter -
mysql> ALTER TABLE tutorials_alter ADD i INT;
Depois de emitir essa instrução, testalter conterá as mesmas duas colunas que tinha quando você criou a tabela pela primeira vez, mas não terá exatamente a mesma estrutura. Isso ocorre porque novas colunas são 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 tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 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 nome_col para indicar que a nova coluna deve ser colocada após nome_coluna. Tente as seguintes instruções ALTER TABLE, usando SHOW COLUMNS após cada uma para ver o efeito que cada uma 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ê quiser reposicionar uma coluna existente dentro de uma tabela, você deve primeiro DROP e, em seguida, ADICIONÁ-la na nova posição.
Alteração de uma definição ou nome de coluna
Para alterar a definição de uma coluna, use MODIFY ou CHANGEcláusula junto com o comando ALTER. Por exemplo, para alterar a colunac de CHAR (1) a CHAR (10), faça isso -
mysql> ALTER TABLE tutorials_alter 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 especifica a nova definição, que inclui o novo nome. Experimente o seguinte exemplo:
mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;
Se agora você usar CHANGE para converter j de BIGINT de volta para INT sem alterar o nome da coluna, a instrução será a esperada -
mysql> ALTER TABLE tutorials_alter CHANGE j j INT;
O efeito de ALTER TABLE em atributos de valor nulo e padrão -
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 MySQLi atribuirá valores automaticamente para esses atributos.
Aqui está o exemplo, onde a coluna NOT NULL terá o valor 100 por padrão.
mysql> ALTER TABLE tutorials_alter
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Se você não usar o comando acima, o MySQLi preencherá os valores NULL em todas as colunas.
Alteração do valor padrão de uma coluna
Você pode alterar um valor padrão para qualquer coluna usando o comando ALTER. Experimente o seguinte exemplo.
mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | 1000 | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Você pode remover a restrição padrão de qualquer coluna usando a cláusula DROP junto com o comando ALTER.
mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Alterar um tipo de tabela
Você pode usar um tipo de tabela usando TYPE cláusula junto com o comando ALTER.
Para descobrir o tipo atual de uma tabela, use a instrução SHOW TABLE STATUS.
mysql> SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
Name: tutorials_alter
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-02-17 11:30:29
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Renomeando uma Tabela
Para renomear uma tabela, use o RENAMEopção da instrução ALTER TABLE. Experimente o exemplo a seguir para renomear tutorials_alter para tutorials_bks.
mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;
Você pode usar o comando ALTER para criar e soltar INDEX em um arquivo MySQL. Veremos esse recurso no próximo capítulo.