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.

[email protected]# 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.