English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Modificação de tabela SQL (instrução ALTER TABLE)

Neste tutorial, você aprenderá como usar SQL para alterar ou modificar uma tabela existente.

Modificar tabela existente

Após a criação da tabela, é provável que, quando você começar a usá-la, perceba que esqueceu de criar a coluna ou restrição necessárias, ou que especificou um nome errado para a coluna.

Neste caso, você pode usar a instrução ALTER TABLE para alterar ou modificar uma tabela existente adicionando, modificando ou removendo colunas da tabela.

Considere queshippersNo banco de dados, há uma tabela cuja estrutura é a seguinte:

+--------------+-------------+------+-----+---------+----------------+
| Field | | Type | | Key | | Default | | Extra |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id | int | | NO | PRI | NULL | auto_increment |
| shipper_name | | varchar(60) | NO | | NULL | |
| phone | | varchar(60) | NO | | NULL | |
+--------------+-------------+------+-----+---------+----------------+

Vamos usar essa tabela shippers para todos os comandos ALTER TABLE.

Agora, suponhamos que queremos expandir a tabela shippers existente adicionando uma coluna. Mas, a questão é como podemos fazer isso usando o comando SQL? Vamos ver.

Adicionar nova coluna

 A sintaxe básica para adicionar uma nova coluna a uma tabela existente:

ALTER TABLE table_name ADD column_name data_type constraints;					

Abaixo está a instrução que adiciona uma nova coluna fax à tabela shippers.

ALTER TABLE shippers ADD fax VARCHAR(20);

Agora, após a execução das instruções acima, se você usar o comando DESCRIBE shippers para ver a estrutura da tabela; No comando de linha do MySQL, conforme mostrado a seguir:

+--------------+-------------+------+-----+---------+----------------+
| Field | | Type | | Key | | Default | | Extra |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id | int | | NO | PRI | NULL | auto_increment |
| shipper_name | | varchar(60) | NO | | NULL | |
| phone | | varchar(60) | NO | | NULL | |
|)2| fax | varchar(
+--------------+-------------+------+-----+---------+----------------+

Atenção:Se você desejar adicionar uma coluna NOT NULL existente, você deve especificar explicitamenteValor padrão. Este valor padrão é usado para preencher a nova coluna para cada linha existente na tabela.

Dica:Quando você adiciona uma nova coluna à tabela, se não especificar NULL nem NOT NULL, a coluna é considerada como especificada como NULL.

O MySQL adiciona novas colunas no final por padrão. No entanto, se você desejar adicionar uma nova coluna após uma coluna específica, você pode usar a cláusula AFTER a seguir:

mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;					

O MySQL fornece uma outra cláusula que você pode usar para adicionar uma nova coluna no primeiro lugar da tabela. Basta substituir a cláusula AFTER do exemplo anterior por FIRST para adicionar uma nova coluna noshippersAdicionar a coluna fax no início da tabela.

Mudar a posição da coluna

No MySQL, se você já criou uma tabela mas não está satisfeito com a posição das colunas existentes na tabela, você pode alterá-las a qualquer momento usando a seguinte sintaxe:

ALTER TABLE table_name
  MODIFY column_name column_definition AFTER column_name;			

A seguinte instrução adicionará a colunafaxcolocadoshippersna tabelashipper_nameapós a coluna.

mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;					

Adicionar restrição

Nossa tabela shippers atual tem um problema principal. Mesmo que você insira registros com números de telefone repetidos, isso não impede, o que não é bom, os números de telefone devem ser únicos.

Você pode adicionar uma restrição aophoneAdicionar restrição UNIQUE à coluna para resolver este problema. A sintaxe básica para adicionar uma restrição a uma coluna existente na tabela é a seguinte:

ALTER TABLE table_name ADD UNIQUE (column_name,...);					

A seguinte instrução UNIQUE adicionaphoneAdicionar restrição à coluna.

mysql> ALTER TABLE shippers ADD UNIQUE (phone);					

Após executar esta instrução, se você tentar inserir um número de telefone repetido, receberá uma mensagem de erro.

Da mesma forma, se você criar uma tabela sem PRIMARY KEY, você pode usar o seguinte conteúdo:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);					

se não foi definida, a seguinte declaração seráPRIMARY KEY a restriçãoshipper_idcoluna.

mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);					

Remover coluna

A sintaxe básica para remover uma coluna do banco de dados existente é:

ALTER TABLE table_name DROP COLUMN column_name;					

A seguinte declaração removeshippersremovemos a coluna nova adicionada na tabelafaxcoluna.

mysql> ALTER TABLE shippers DROP COLUMN fax;					

Agora, após executar a declaração acima, se você ver a estrutura da tabela, será como mostrado a seguir:

+--------------+-------------+------+-----+---------+----------------+
| Field | | Type | | Key | | Default | | Extra |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id | int | | NO | PRI | NULL | auto_increment |
| shipper_name | | varchar(60) | NO | | NULL | |
| phone | | varchar(20) | NO | UNI | NULL | |
+--------------+-------------+------+-----+---------+----------------+

Alterar o tipo de dados da coluna

Você pode usar a seguinte cláusula ALTER para modificar o tipo de dados da coluna no SQL Server:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;					

Mas o servidor de banco de dados MySQL não suporta a sintaxe ALTER COLUMN. Ele suporta cláusulas alternativas para modificar colunas, conforme mostrado a seguir:

ALTER TABLE table_name MODIFY column_name new_data_type;					

A seguinte declaração alterashippersna tabelaphoneO tipo de dados atual da coluna é alterado de VARCHAR para CHAR, com comprimento de20 alterado para15。

mysql> ALTER TABLE shippers MODIFY phone CHAR(15);					

Da mesma forma, você pode usar a cláusula MODIFY para alternar entre permitir ou não valores nulos nas colunas de uma tabela do MySQL, reespecificando a definição existente da coluna e adicionando a restrição null ou not null no final, conforme mostrado a seguir:

mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;					

Renomear tabela

A sintaxe básica para renomear uma tabela existente no MySQL é:

ALTER TABLE current_table_name RENAME new_column_name;					

A seguinte declaraçãoshippersNome da tabela renomeadashipper

mysql> ALTER TABLE shippers RENAME shipper;					

Você também pode usar a seguinte declaração RENAME TABLE no MySQL para alcançar o mesmo objetivo:

mysql> RENAME TABLE shippers TO shipper;