sql >> Database teknologi >  >> RDS >> Mysql

Sådan kopieres tabel i MySQL

Nogle gange skal du muligvis kopiere tabel i MySQL. Der er mange forskellige måder at kopiere tabel i MySQL. Her er trinene til at kopiere tabel i MySQL. Du kan bruge dem til at kopiere tabel til en anden tabel, kopiere tabel fra en database til en anden, kopiere tabelstruktur, kopiere tabel med data, kopiere tabelstruktur med indeks eller kopiere tabel fra en server til en anden.

Sådan kopierer man tabel i MySQL

Sådan kopierer du tabel i MySQL. Der er forskellige use cases til at kopiere tabel i MySQL. Vi vil se nærmere på hver af dem.

MySQL Kopier data fra én tabel til en ny tabel

Typisk skal du kopiere tabel i MySQL til en ny tabel. I dette tilfælde skal du bruge CREATE TABLE og SELECT-sætningen som vist nedenfor

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

I ovenstående forespørgsel skal du angive navnene på eksisterende tabel sammen med de kolonner, du vil kopiere, og også et nyt tabelnavn. MySQL vil udfylde din nye tabel med resultatet af din SELECT-sætning.

Lad os sige, at du har en eksisterende tabel product_list

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

Her er SQL-forespørgslen til at kopiere produktliste tabel til ny tabel kaldet ny_produktliste

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 |
+------------+--------------------+-------+

Bemærk, at den nye tabel kun oprettes, hvis den ikke eksisterer. Ellers får du en fejl. For at undgå at få en fejl, når du dublerer tabel i MySQL, kan du bruge IF NOT EXIST-sætningen i CREATE TABLE-sætningen, som vist nedenfor.

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

Bonus Læs:Sådan tilføjes NOT NULL-begrænsning i MySQL

Hvis du kun vil kopiere delvise data fra en tabel til en ny tabel, det vil sige nogle rækker, men ikke alle, kan du bruge WHERE-betingelsen i din SELECT-sætning som vist

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

Her er SQL-forespørgslen til at kopiere delvise data fra produktliste tabel til ny tabel kaldet nye_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æser:Sådan tilføjer du standardbegrænsning i MySQL

MySQL Kopier tabelstruktur til ny tabel

Ovenstående SQL-forespørgsler kopierer kun tabel og data. De kopierer ikke tabelobjekter såsom primær nøgle, indekser, begrænsninger, triggere. For at kopiere tabelstruktur og data skal du bruge CREATE TABLE-sætning med LIKE nøgleord, som vist nedenfor

CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

Lad os sige, at du har en ordrer tabel med primær nøgle (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 |                |
+--------------+--------------+------+-----+-------------------+----------------+

og du vil kopiere strukturen af ​​ordrer til nye_ordrer bord. Her er SQL-forespørgslen for at kopiere tabelstruktur til ny tabel.

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 også et primært nøglefelt id. Ovenstående erklæring kopierer kun tabelstruktur, men ikke data. Du skal separat kopiere data, som vist i næste afsnit.

Bonus Læs:MySQL Vælg Top N rækker pr. gruppe

MySQL Kopier data fra én tabel til eksisterende tabel

Ovenstående erklæring vil skabe en ny tabel med strukturen af ​​den gamle tabel, men det vil være en tom tabel. Så skal du bruge INSERT-sætningen til at kopiere data fra gammel tabel til ny tabel.

INSERT new_table
SELECT * FROM existing_table;

Her er SQL-forespørgslen til at kopiere data fra ordrer til eksisterende tabel nye_ordrer

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 Kopier tabel fra én database til en anden

Hvis du vil duplikere tabel i MySQL fra database til en anden, skal du blot inkludere databasenavnene i dine tabelnavne, mens du bruger ovenstående SQL-forespørgsler, som vist nedenfor med fed skrift

CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;

INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

Den første SQL-sætning ovenfor vil duplikere tabelstrukturen i MySQL fra kildedatabasen (f.eks. kilde_db ) til en anden (f.eks. destination_db ). Den anden sætning vil kopiere data fra en tabel til en anden.

Erstat source_db og destination_db i ovenstående forespørgsler med henholdsvis kilde- og destinationsdatabaser.

Forhåbentlig hjælper denne artikel dig med at kopiere tabel i MySQL. Vær forsigtig, når du kopierer tabel i MySQL, med et stort antal poster, da det kan tage meget tid og ressourcer.

Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Antag en menneskelig tilgang til dataforvaltning

  2. overføre LIMIT som parametre til MySQL sproc

  3. Aktiver logning af langsomme forespørgsler (langsom forespørgselslog) i MySQL-databasen

  4. Trin til at installere MySQL8 på CentOS