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