sql >> データベース >  >> RDS >> Mysql

MySQLでテーブルをコピーする方法

    MySQLでテーブルをコピーする必要がある場合があります。 MySQLでテーブルをコピーする方法はたくさんあります。 MySQLでテーブルをコピーする手順は次のとおりです。これらを使用して、テーブルを別のテーブルにコピーしたり、テーブルをあるデータベースから別のデータベースにコピーしたり、テーブル構造をコピーしたり、テーブルをデータでコピーしたり、テーブル構造をインデックスでコピーしたり、テーブルをあるサーバーから別のサーバーにコピーしたりできます。

    MySQLでテーブルをコピーする方法

    MySQLでテーブルをコピーする方法は次のとおりです。 MySQLでテーブルをコピーするためのさまざまなユースケースがあります。それぞれについて詳しく見ていきます。

    MySQLあるテーブルから新しいテーブルにデータをコピーする

    通常、MySQLのテーブルを新しいテーブルにコピーする必要があります。この場合、以下に示すように、CREATETABLEおよびSELECTステートメントを使用する必要があります

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

    上記のクエリでは、既存のテーブルの名前と、コピーする列、および新しいテーブル名を指定する必要があります。 MySQLは、SELECTステートメントの結果を新しいテーブルに入力します。

    既存のテーブルproduct_listがあるとします。

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

    product_listをコピーするSQLクエリは次のとおりです テーブルを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 |
    +------------+--------------------+-------+
    

    新しいテーブルは、存在しない場合にのみ作成されることに注意してください。そうしないと、エラーが発生します。 MySQLでテーブルを複製するときにエラーが発生しないようにするには、以下に示すように、CREATETABLEステートメントでIFNOTEXIST句を使用できます。

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

    ボーナスリード:MySQLにNOTNULL制約を追加する方法

    1つのテーブルから新しいテーブルに部分的なデータのみをコピーする場合、つまりすべてではない一部の行をコピーする場合は、次のようにSELECTステートメントでWHERE条件を使用できます

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

    product_listから部分的なデータをコピーするSQLクエリは次のとおりです。 テーブルを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 |
    +------------+--------------+-------+
    

    ボーナスリード:MySQLにデフォルトの制約を追加する方法

    MySQLテーブル構造を新しいテーブルにコピー

    上記のSQLクエリは、テーブルとデータのみをコピーします。主キー、インデックス、制約、トリガーなどのテーブルオブジェクトはコピーされません。テーブルの構造とデータをコピーするには、以下に示すように、LIKEキーワードを指定してCREATETABLEステートメントを使用する必要があります

    CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;
    

    注文があるとします 主キー(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 |                |
    +--------------+--------------+------+-----+-------------------+----------------+
    

    注文の構造をコピーしたい new_ordersへ テーブル。テーブル構造を新しいテーブルにコピーするSQLクエリは次のとおりです。

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

    ご覧のとおり、new_ordersテーブルには主キーフィールドidもあります。 上記のステートメントは、テーブル構造のみをコピーし、データはコピーしません。次のセクションに示すように、データを個別にコピーする必要があります。

    ボーナスリード:MySQLはグループごとに上位N行を選択

    MySQLが1つのテーブルから既存のテーブルにデータをコピーする

    上記のステートメントは、古いテーブルの構造で新しいテーブルを作成しますが、空のテーブルになります。次に、INSERTステートメントを使用して、古いテーブルから新しいテーブルにデータをコピーする必要があります。

    INSERT new_table
    SELECT * FROM existing_table;

    注文からデータをコピーするSQLクエリは次のとおりです 既存のテーブルに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 |
    +----+--------------+------------+-------+-------------+---------------------+
    

    ボーナスリード:MySQLコピーデータベース

    あるデータベースから別のデータベースへのMySQLコピーテーブル

    MySQLのテーブルをデータベース間で複製する場合は、以下に太字で示すように、上記のSQLクエリを使用しながら、テーブル名にデータベース名を含めるだけです。

    CREATE TABLE destination_db.new_table 
    LIKE source_db.existing_table;
    
    INSERT destination_db.new_table 
    SELECT *
    FROM source_db.existing_table;
    

    上記の最初のSQLステートメントは、ソースデータベース( source_db など)からMySQLのテーブル構造を複製します。 )別の(例: destination_db )。 2番目のステートメントは、あるテーブルから別のテーブルにデータをコピーします。

    source_dbを置き換えます およびdestination_db 上記のクエリで、それぞれソースデータベースと宛先データベースを使用します。

    うまくいけば、この記事がMySQLでテーブルをコピーするのに役立つでしょう。多数のレコードを含むMySQLでテーブルをコピーする場合は、多くの時間とリソースがかかる可能性があるため、注意してください。

    Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. MS-SQLServerのエイリアス列でGROUPBYを実行するにはどうすればよいですか?

    2. SQLで大文字で単語を分割する

    3. SQL Server ServerManagementStudioを使用したデータベースのインポート/エクスポート

    4. KGXGNポーリングエラー(15)