Tabela de cópia do MySQL

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 ... SELECTinstruçã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... SELECTa 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 TABLEcláusula.
  • Segundo, construa uma consulta que recupere dados de uma tabela existente.

Esta instrução cria uma nova tabela new_tablee copia os dados dela existing_tablepara a nova com base no conjunto de resultados da SELECTclá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 EXISTa opção na CREATE TABLEinstruçã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 estrangeiragatilhos 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_bke copie todos os dados da officestabela 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_bktabela 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 WHEREclá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_usatabela.

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 à officestabela, 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 testdbusando a seguinte instrução:

CREATE DATABASE IF NOT EXISTS testdb;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, crie a  officestabela testdbcopiando sua estrutura da officestabela no  classicmodelsbanco 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.officestabela para testdb.officestabela.

INSERT testdb.offices
SELECT *
FROM classicmodels.offices;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, verifique os dados da testdb.officestabela.

SELECT * FROM testdb.offices;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo de COPY TABLE do MySQL

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.

Deixe um comentário

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