Resumo : neste tutorial, você aprenderá como copiar tabelas dentro do mesmo banco de dados ou de um banco de dados para outro usando CREATE TABLE ... SELECT
instrução.
Copiando tabelas dentro do mesmo banco de dados
Copiar dados de uma tabela existente para uma nova é muito útil em alguns casos, como fazer backup de dados e replicar os dados de produção para teste.
Para copiar dados de uma tabela para uma nova, você usa CREATE TABLE... SELECT
a seguinte instrução:
CREATE TABLE new_table
SELECT column1, column2, ...
FROM existing_table;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe;
- Primeiro, especifique o nome da nova tabela na
CREATE TABLE
cláusula. - Segundo, construa uma consulta que recupere dados de uma tabela existente.
Esta instrução cria uma nova tabela new_table
e copia os dados dela existing_table
para a nova com base no conjunto de resultados da SELECT
cláusula.
Para copiar dados parciais de uma tabela existente para a nova, use a cláusula WHERE na instrução SELECT da seguinte maneira:
CREATE TABLE new_table
SELECT column1, column2, ...
FROM existing_table
WHERE condition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
É muito importante verificar se a tabela que você deseja criar já existe antes de criá-la.
Para fazer isso, você pode usar IF NOT EXIST
a opção na CREATE TABLE
instrução.
A instrução completa para copiar dados de uma tabela existente para uma nova é a seguinte:
CREATE TABLE IF NOT EXISTS new_table
SELECT column1, column2, ...
FROM existing_table
WHERE condition;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que esta instrução copia a tabela e seus dados. Ele não copia outros objetos de banco de dados associados à tabela existente, como índices , restrições de chave primária , restrições de chave estrangeira , gatilhos e assim por diante.
Para copiar dados de uma tabela e também de todos os objetos dependentes da tabela, você usa as seguintes instruções:
Primeiro, crie uma nova tabela cuja estrutura seja igual à existente:
CREATE TABLE IF NOT EXISTS new_table
LIKE existing_table;
Segundo, insira os dados da tabela existente na nova tabela:
INSERT new_table
SELECT * FROM existing_table;
Exemplos de cópia de uma tabela no mesmo banco de dados
Usaremos o banco de dados de amostra para fins de demonstração.
Primeiro, crie uma nova tabela chamada offices_bk
e copie todos os dados da offices
tabela para a nova tabela:
CREATE TABLE IF NOT EXISTS offices_bk
SELECT * FROM offices;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, verifique a cópia recuperando os dados da office_bk
tabela da seguinte forma:
SELECT * FROM offices_bk;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------+---------------+------------------+--------------------------+--------------+------------+-----------+------------+-----------+
| officeCode | city | phone | addressLine1 | addressLine2 | state | country | postalCode | territory |
+------------+---------------+------------------+--------------------------+--------------+------------+-----------+------------+-----------+
| 1 | San Francisco | +1 650 219 4782 | 100 Market Street | Suite 300 | CA | USA | 94080 | NA |
| 2 | Boston | +1 215 837 0825 | 1550 Court Place | Suite 102 | MA | USA | 02107 | NA |
| 3 | NYC | +1 212 555 3000 | 523 East 53rd Street | apt. 5A | NY | USA | 10022 | NA |
| 4 | Paris | +33 14 723 4404 | 43 Rue Jouffroy D'abbans | NULL | NULL | France | 75017 | EMEA |
| 5 | Tokyo | +81 33 224 5000 | 4-1 Kioicho | NULL | Chiyoda-Ku | Japan | 102-8578 | Japan |
| 6 | Sydney | +61 2 9264 2451 | 5-11 Wentworth Avenue | Floor #2 | NULL | Australia | NSW 2010 | APAC |
| 7 | London | +44 20 7877 2041 | 25 Old Broad Street | Level 7 | NULL | UK | EC2N 1HN | EMEA |
+------------+---------------+------------------+--------------------------+--------------+------------+-----------+------------+-----------+
7 rows in set (0.00 sec)
Caso queira copiar apenas os escritórios nos EUA, você pode usar uma WHERE
cláusula no extrato:
CREATE TABLE IF NOT EXISTS offices_usa
SELECT *
FROM
offices
WHERE
country = 'USA'
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir obtém todos os dados da offices_usa
tabela.
SELECT * FROM offices_usa;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------+---------------+-----------------+----------------------+--------------+-------+---------+------------+-----------+
| officeCode | city | phone | addressLine1 | addressLine2 | state | country | postalCode | territory |
+------------+---------------+-----------------+----------------------+--------------+-------+---------+------------+-----------+
| 1 | San Francisco | +1 650 219 4782 | 100 Market Street | Suite 300 | CA | USA | 94080 | NA |
| 2 | Boston | +1 215 837 0825 | 1550 Court Place | Suite 102 | MA | USA | 02107 | NA |
| 3 | NYC | +1 212 555 3000 | 523 East 53rd Street | apt. 5A | NY | USA | 10022 | NA |
+------------+---------------+-----------------+----------------------+--------------+-------+---------+------------+-----------+
3 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Suponha que você queira copiar não apenas os dados, mas também todos os objetos de banco de dados associados à offices
tabela, usamos as seguintes instruções:
CREATE TABLE offices2 LIKE offices;
INSERT offices2
SELECT * FROM offices;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Copiando tabelas entre bancos de dados
Às vezes, você deseja copiar uma tabela para um banco de dados diferente. Nesses casos, você usa as seguintes declarações:
CREATE TABLE destination_db.new_table
LIKE source_db.existing_table;
INSERT destination_db.new_table
SELECT * FROM source_db.existing_table;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A primeira instrução cria uma nova tabela new_table no banco de dados de destino ( destination_db
) duplicando a tabela existente ( existing_table
) do banco de dados de origem ( source_db
).
A segunda instrução copia os dados da tabela existente no banco de dados de origem para a nova tabela no banco de dados de destino.
Por exemplo:
Primeiro, crie um banco de dados nomeado testdb
usando a seguinte instrução:
CREATE DATABASE IF NOT EXISTS testdb;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, crie a offices
tabela testdb
copiando sua estrutura da offices
tabela no classicmodels
banco de dados.
CREATE TABLE testdb.offices LIKE classicmodels.offices;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, copie os dados de classimodels.offices
tabela para testdb.offices
tabela.
INSERT testdb.offices
SELECT *
FROM classicmodels.offices;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por fim, verifique os dados da testdb.offices
tabela.
SELECT * FROM testdb.offices;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste tutorial, você aprendeu várias técnicas para copiar tabelas dentro de um banco de dados e de um banco de dados para outro.