Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment copier une table dans MySQL

Parfois, vous devrez peut-être copier la table dans MySQL. Il existe de nombreuses façons de copier une table dans MySQL. Voici les étapes pour copier la table dans MySQL. Vous pouvez les utiliser pour copier une table dans une autre table, copier une table d'une base de données à une autre, copier une structure de table, copier une table avec des données, copier une structure de table avec un index ou copier une table d'un serveur à un autre.

Comment copier une table dans MySQL

Voici comment copier une table dans MySQL. Il existe différents cas d'utilisation pour copier une table dans MySQL. Nous allons les examiner en détail.

MySQL Copier les données d'une table vers une nouvelle table

En règle générale, vous devez copier une table dans MySQL vers une nouvelle table. Dans ce cas, vous devez utiliser l'instruction CREATE TABLE et SELECT comme indiqué ci-dessous

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

Dans la requête ci-dessus, vous devez spécifier les noms de la table existante avec les colonnes que vous souhaitez copier, ainsi que le nouveau nom de la table. MySQL remplira votre nouvelle table avec le résultat de votre instruction SELECT.

Disons que vous avez une table existante product_list

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

Voici la requête SQL pour copier product_list table dans une nouvelle table appelée new_product_list

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

Veuillez noter que la nouvelle table ne sera créée que si elle n'existe pas. Sinon, vous obtiendrez une erreur. Pour éviter d'obtenir une erreur lorsque vous dupliquez une table dans MySQL, vous pouvez utiliser la clause IF NOT EXIST dans l'instruction CREATE TABLE, comme indiqué ci-dessous.

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

Bonus Read :Comment ajouter une contrainte NOT NULL dans MySQL

Si vous souhaitez copier uniquement des données partielles d'une table vers une nouvelle table, c'est-à-dire certaines lignes mais pas toutes, vous pouvez utiliser la condition WHERE dans votre instruction SELECT comme indiqué

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

Voici la requête SQL pour copier des données partielles de product_list table dans une nouvelle table appelée new_products2

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

Lecture bonus :comment ajouter une contrainte par défaut dans MySQL

MySQL Copier la structure de la table dans une nouvelle table

Les requêtes SQL ci-dessus ne copient que la table et les données. Ils ne copieront pas les objets de table tels que la clé primaire, les index, les contraintes, les déclencheurs. Pour copier la structure et les données de la table, vous devez utiliser l'instruction CREATE TABLE avec le mot-clé LIKE, comme indiqué ci-dessous

CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

Disons que vous avez une commande table avec clé primaire (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 |                |
+--------------+--------------+------+-----+-------------------+----------------+

et vous souhaitez copier la structure des commandes aux nouvelles_commandes table. Voici la requête SQL pour copier la structure de la table dans une nouvelle table.

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

Comme vous pouvez le voir, la table new_orders a également un champ de clé primaire id. L'instruction ci-dessus ne copiera que la structure de la table mais pas les données. Vous devez copier les données séparément, comme indiqué dans la section suivante.

Lecture bonus :MySQL sélectionne les N premières lignes par groupe

MySQL Copie les données d'une table vers une table existante

L'instruction ci-dessus créera une nouvelle table avec la structure de l'ancienne table, mais ce sera une table vide. Ensuite, vous devez utiliser l'instruction INSERT pour copier les données de l'ancienne table vers la nouvelle table.

INSERT new_table
SELECT * FROM existing_table;

Voici la requête SQL pour copier les données des commandes à la table existante new_orders

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

Lecture bonus :copie de la base de données MySQL

MySQL Copy Table d'une base de données à une autre

Si vous souhaitez dupliquer une table dans MySQL d'une base de données à une autre, incluez simplement les noms de base de données dans vos noms de table tout en utilisant les requêtes SQL ci-dessus, comme indiqué ci-dessous en gras

CREATE TABLE destination_db.new_table 
LIKE source_db.existing_table;

INSERT destination_db.new_table 
SELECT *
FROM source_db.existing_table;

La première instruction SQL ci-dessus dupliquera la structure de la table dans MySQL à partir de la base de données source (par exemple, source_db ) à un autre (par exemple destination_db ). La deuxième instruction copiera les données d'une table à une autre.

Remplacez source_db et db_destination dans les requêtes ci-dessus avec les bases de données source et destination respectivement.

Espérons que cet article vous aidera à copier une table dans MySQL. Soyez prudent lorsque vous copiez une table dans MySQL, avec un grand nombre d'enregistrements, car cela peut prendre beaucoup de temps et de ressources.

Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !