sql >> Databasteknik >  >> RDS >> Mysql

Hur man kopierar tabell i MySQL

Ibland kan du behöva kopiera tabellen i MySQL. Det finns många olika sätt att kopiera tabeller i MySQL. Här är stegen för att kopiera tabell i MySQL. Du kan använda dem för att kopiera tabell till en annan tabell, kopiera tabell från en databas till en annan, kopiera tabellstruktur, kopiera tabell med data, kopiera tabellstruktur med index eller kopiera tabell från en server till en annan.

Hur man kopierar tabell i MySQL

Så här kopierar du tabell i MySQL. Det finns olika användningsfall för att kopiera tabeller i MySQL. Vi kommer att titta på var och en av dem i detalj.

MySQL Kopiera data från en tabell till en ny tabell

Vanligtvis måste du kopiera tabell i MySQL till en ny tabell. I det här fallet måste du använda CREATE TABLE och SELECT-satsen som visas nedan

CREATE TABLE new_table 
SELECT column, column2, column3 
FROM
    existing_table;

I ovanstående fråga måste du ange namn på befintlig tabell tillsammans med kolumnerna som du vill kopiera, och även nytt tabellnamn. MySQL kommer att fylla i din nya tabell med resultatet av din SELECT-sats.

Låt oss säga att du har en befintlig tabell produktlista

mysql> select * from product_list;
+------------+--------------------+-------+
| product_id | product_name       | price |
+------------+--------------------+-------+
|          1 | iPhone 11          |   400 |
|          2 | Samsung Galaxy A50 |   250 |
+------------+--------------------+-------+

Här är SQL-frågan för att kopiera produktlista tabell till ny tabell som heter ny_produktlista

mysql> create table new_product_list
       select *
       from product_list;

mysql> select * from new_product_list;
+------------+--------------------+-------+
| product_id | product_name       | price |
+------------+--------------------+-------+
|          1 | iPhone 11          |   400 |
|          2 | Samsung Galaxy A50 |   250 |
+------------+--------------------+-------+

Observera att den nya tabellen endast skapas om den inte finns. Annars får du ett felmeddelande. För att undvika att få ett felmeddelande när du duplicerar tabell i MySQL, kan du använda IF NOT EXIST-satsen i CREATE TABLE-satsen, som visas nedan.

mysql> create table if not exist new_product_list
       select *
       from product_list;

Bonus Läs:Hur man lägger till NOT NULL-begränsning i MySQL

Om du bara vill kopiera delar av data från en tabell till en ny tabell, det vill säga vissa rader men inte alla, kan du använda WHERE-villkoret i din SELECT-sats som visas

CREATE TABLE new_table 
SELECT column1, column2, column3 
FROM
    existing_table
WHERE
    conditions;

Här är SQL-frågan för att kopiera delar av data från produktlista tabell till ny tabell som heter nya_produkter2

mysql> create table new_products2
       select *
       from product_list
       where product_id=1;

mysql> select * from new_products2;
+------------+--------------+-------+
| product_id | product_name | price |
+------------+--------------+-------+
|          1 | iPhone 11    |   400 |
+------------+--------------+-------+

Bonusläsning:Hur man lägger till standardbegränsning i MySQL

MySQL Kopiera tabellstruktur till ny tabell

Ovanstående SQL-frågor kopierar endast tabell och data. De kommer inte att kopiera tabellobjekt som primärnyckel, index, begränsningar, utlösare. För att kopiera tabellstruktur och data måste du använda CREATE TABLE-satsen med nyckelordet LIKE, som visas nedan

CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

Låt oss säga att du har en order tabell med primärnyckel (id)

mysql> describe orders;
+--------------+--------------+------+-----+-------------------+----------------+
| Field        | Type         | Null | Key | Default           | Extra          |
+--------------+--------------+------+-----+-------------------+----------------+
| id           | int(11)      | NO   | PRI | NULL              | auto_increment |
| product_name | varchar(255) | NO   |     | NULL              |                |
| order_date   | date         | YES  |     | NULL              |                |
| price        | int(11)      | NO   |     | NULL              |                |
| description  | text         | YES  |     | NULL              |                |
| created_at   | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+--------------+--------------+------+-----+-------------------+----------------+

och du vill kopiera strukturen för order till nya_order tabell. Här är SQL-frågan för att kopiera tabellstrukturen till en ny tabell.

mysql> create table new_orders like orders;

mysql> describe new_orders;
+--------------+--------------+------+-----+-------------------+----------------+
| Field        | Type         | Null | Key | Default           | Extra          |
+--------------+--------------+------+-----+-------------------+----------------+
| id           | int(11)      | NO   | PRI | NULL              | auto_increment |
| product_name | varchar(255) | NO   |     | NULL              |                |
| order_date   | date         | YES  |     | NULL              |                |
| price        | int(11)      | NO   |     | NULL              |                |
| description  | text         | YES  |     | NULL              |                |
| created_at   | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |
+--------------+--------------+------+-----+-------------------+----------------+

Som du kan se har tabellen new_orders också ett primärnyckelfält id. Ovanstående uttalande kommer bara att kopiera tabellstruktur men inte data. Du måste kopiera data separat, som visas i nästa avsnitt.

Bonusläsning:MySQL Välj Top N rader per grupp

MySQL Kopiera data från en tabell till befintlig tabell

Ovanstående uttalande kommer att skapa en ny tabell med strukturen för den gamla tabellen, men det kommer att vara en tom tabell. Sedan måste du använda INSERT-satsen för att kopiera data från gammal tabell till ny tabell.

INSERT new_table
SELECT * FROM existing_table;

Här är SQL-frågan för att kopiera data från order till befintlig tabell nya_order

mysql> insert new_orders
       select * from orders;

mysql> select * from orders;
+----+--------------+------------+-------+-------------+---------------------+
| id | product_name | order_date | price | description | created_at          |
+----+--------------+------------+-------+-------------+---------------------+
|  1 | A            | 2020-07-01 |   150 | New product | 2020-06-01 00:00:00 |
|  2 | B            | 2020-07-01 |   235 | Old product | 2020-06-15 00:00:00 |
+----+--------------+------------+-------+-------------+---------------------+

Bonus Läs:MySQL Copy Database

MySQL Kopiera tabell från en databas till en annan

Om du vill duplicera tabell i MySQL från databas till en annan, inkludera bara databasnamnen i dina tabellnamn medan du använder ovanstående SQL-frågor, som visas nedan i fetstil

CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;

INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

Den första SQL-satsen ovan kommer att duplicera tabellstrukturen i MySQL från källdatabasen (t.ex. källa_db ) till en annan (t.ex. destination_db ). Den andra satsen kopierar data från en tabell till en annan.

Ersätt source_db och destination_db i ovanstående frågor med käll- respektive destinationsdatabaser.

Förhoppningsvis hjälper den här artikeln dig att kopiera tabellen i MySQL. Var försiktig när du kopierar tabell i MySQL, med ett stort antal poster, eftersom det kan ta mycket tid och resurser.

Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Hur man beviljar alla rättigheter till rootanvändare i MySQL 8.0

  2. Får du veckonummer av ett datum i MS SQL Server 2005?

  3. Komma igång Justera prestanda i Azure SQL Database

  4. Hur man exporterar data till platt fil med BCP Utility och importerar data med Bulk Insert