Como adicionar colunas a uma tabela usando a instrução MySQL ADD COLUMN

Resumo : neste tutorial, mostraremos como adicionar uma coluna a uma tabela usando a ADD COLUMNinstrução MySQL.

Introdução à instrução MySQL ADD COLUMN

Para adicionar uma nova coluna a uma tabela existente, use a instrução ALTER TABLE ADD COLUMN da seguinte forma:

ALTER TABLE table_name
ADD COLUMN new_column_name data_type 
[FIRST | AFTER existing_column];Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • Primeiro, especifique o nome da tabela à qual deseja adicionar uma nova coluna após a ALTER TABLEcláusula.
  • Segundo, especifique a nova coluna e sua definição após a ADD COLUMNcláusula. Observe que COLUMNa palavra-chave é opcional, portanto você pode omiti-la.
  • Terceiro, especifique a posição da nova coluna na tabela.

Ao adicionar uma nova coluna a uma tabela, você pode especificar sua posição na tabela. Use a palavra-chave FIRSTse desejar que a nova coluna seja posicionada como a primeira coluna da tabela. Alternativamente, você usa a AFTER existing_columncláusula para especificar que a nova coluna deve ser adicionada após uma coluna existente.

Se você não especificar explicitamente a posição da nova coluna, a instrução irá adicioná-la automaticamente como a última coluna da tabela.

Para adicionar duas ou mais colunas a uma tabela ao mesmo tempo, você usa várias ADDcláusulas:

ALTER TABLE table_name
ADD [COLUMN] new_column_name data_type [FIRST|AFTER existing_column],
ADD [COLUMN] new_column_name data_type [FIRST|AFTER existing_column],
...;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Exemplos de MySQL ADD COLUMN

Vejamos alguns exemplos de adição de uma ou mais colunas a uma tabela.

Criaremos uma tabela chamada vendorscom duas colunas ide name:

CREATE TABLE vendors (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

1) Exemplo de adição de uma coluna

Primeiro, adicione uma nova coluna phoneà vendorstabela:

ALTER TABLE vendors
ADD COLUMN phone VARCHAR(15) AFTER name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como especificamos phoneexplicitamente a posição da coluna após a namecoluna, a instrução coloca a phonecoluna após a namecoluna.

Segundo, visualize a lista de colunas da tabela de fornecedores usando a DESCinstrução:

DESC vendors;

Saída:

+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int          | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
| phone | varchar(15)  | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)Linguagem de código:  PHP  ( php )

2) Adicionando uma coluna como última coluna

Primeiro, adicione uma nova coluna vendor_groupà vendorstabela:

ALTER TABLE vendors
ADD COLUMN vendor_group INT NOT NULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta instrução, não especificamos a posição da nova coluna, portanto ela adiciona a  vendor_groupcoluna como a última coluna da vendorstabela.

Em segundo lugar, veja a vendorstabela:

DESC vendors;

Saída:

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int          | NO   | PRI | NULL    | auto_increment |
| name         | varchar(255) | YES  |     | NULL    |                |
| phone        | varchar(15)  | YES  |     | NULL    |                |
| vendor_group | int          | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)Linguagem de código:  PHP  ( php )

3) Exemplo de adição de duas colunas

Primeiro, insira algumas linhas na vendorstabela.

INSERT INTO vendors(name,phone,vendor_group)
VALUES('IBM','(408)-298-2987',1),
      ('Microsoft','(408)-298-2988',1);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, consulte os dados da vendorstabela:

SELECT 
  id, 
  name, 
  phone, 
  vendor_group 
FROM 
  vendors;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-----------+----------------+--------------+
| id | name      | phone          | vendor_group |
+----+-----------+----------------+--------------+
|  1 | IBM       | (408)-298-2987 |            1 |
|  2 | Microsoft | (408)-298-2988 |            1 |
+----+-----------+----------------+--------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Terceiro, adicione mais duas colunas emailà hourly_ratetabela vendorsusando duas ADDcláusulas:

ALTER TABLE vendors
ADD COLUMN email VARCHAR(100) NOT NULL,
ADD COLUMN hourly_rate decimal(10,2) NOT NULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que ambas as colunas emaile são . Porém, a tabela já contém dados. Neste caso, o MySQL usará valores padrão para essas novas colunas.hourly_rateNOT NULLvendors

Finalmente, recupere os dados da vendorstabela:

SELECT 
  id, 
  name, 
  phone, 
  vendor_group, 
  email, 
  hourly_rate 
FROM 
  vendors;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-----------+----------------+--------------+-------+-------------+
| id | name      | phone          | vendor_group | email | hourly_rate |
+----+-----------+----------------+--------------+-------+-------------+
|  1 | IBM       | (408)-298-2987 |            1 |       |        0.00 |
|  2 | Microsoft | (408)-298-2988 |            1 |       |        0.00 |
+----+-----------+----------------+--------------+-------+-------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

A saída indica que a emailcoluna está preenchida com espaços em branco, não com NULLvalores. E a hourly_ratecoluna é preenchida com 0.00.

4) Adicionando uma coluna que já existe

Se você adicionar uma coluna que já existe na tabela, o MySQL emitirá um erro. Por exemplo, se você executar a seguinte instrução:

ALTER TABLE vendors
ADD COLUMN vendor_group INT NOT NULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

Error Code: 1060. Duplicate column name 'vendor_group'Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para a tabela com poucas colunas, é fácil ver quais colunas já estão lá. Porém, para uma tabela grande com centenas de colunas, fica mais difícil.

Neste caso, você deseja verificar se já existe uma coluna em uma tabela antes de adicioná-la.

No entanto, não há nenhuma declaração como ADD COLUMN IF NOT EXISTSdisponível. Felizmente, você pode obter essas informações da columnstabela do information_schemabanco de dados como a seguinte consulta:

SELECT 
    IF(count(*) = 1, 'Exist','Not Exist') AS result
FROM
    information_schema.columns
WHERE
    table_schema = 'classicmodels'
        AND table_name = 'vendors'
        AND column_name = 'phone';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+-----------+
| result    |
+-----------+
| Not Exist |
+-----------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Na cláusula WHERE , passamos três argumentos: esquema da tabela ou banco de dados, nome da tabela e nome da coluna. Usamos a função IF para retornar se a coluna existe ou não.

Resumo

  • Use ADD COLUMNa cláusula MySQL na ALTER TABLEinstrução para adicionar uma ou mais colunas a uma tabela.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *