MySQLでは、1つのテーブルの内容を同じデータベース内の別のテーブルにコピーする方法は?


118

MySQLは初めてです。あるテーブルの内容を同じデータベース内の別のテーブルにコピーしたいのですが。基本的に、別のテーブルからテーブルに挿入したいと思います。これを行う簡単な方法はありますか?

回答:


184

INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;

編集:またはテーブルが異なる構造を持っている場合は、次のこともできます:

INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;

編集:これを制約する..

INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1

このクエリの実行中にソーステーブルで挿入操作を実行したい場合はどうなりますか?挿入操作をロックするかどうか。
Lawakush Kurmi

135

テーブルが存在しない場合は、次のように同じスキーマでテーブルを作成できます。

CREATE TABLE table2 LIKE table1;

次に、データをコピーします。

INSERT INTO table2 SELECT * FROM table1

1
私はこのコードSELECT * INTO newTable FROM sourceTablew3schoolで見つけました、なぜそれが機能しないのですかMySQL
Kasun Siyambalapitiya '31

@KasunSiyambalapitiya SELECT ... INTOは、テーブルを出力ファイルまたは変数にエクスポートするためのものです。テーブルには直接入れません。dev.mysql.com/doc/refman/5.7/en/select-into.htmlを
Doktor J

@Kasun Siyambalapitiyaそのw3schoolページは別のSQL用であり、MySQL用ではありません。w3schoolsにエラー報告が追加されました。問題が見つかった場合は、正確な知識を得るためにサイトで報告してください。
Nightwolf

27

table1が大きく、コピープロセス中にロックしない場合は、代わりにダンプとロードを実行できます。

CREATE TABLE table2 LIKE table1;

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;

stackoverflow.com/a/9536680/351903ソリューションを使用して、RDSでダンプを試しました。ファイルは作成されましたが、長い間0サイズのままでした。また、を確認したところshow processlist、実行中のクエリを確認できませんでした。何が問題なのかわからない。
Sandeepan Nath

15

これは私のために働いた、

CREATE TABLE newtable LIKE oldtable;

古いテーブルでnewtableを複製します

INSERT newtable SELECT * FROM oldtable;

すべての行データを新しいテーブルにコピーします。

ありがとうございました


10

ワンショットでコンテンツを作成およびコピーする場合は、SELECTを使用します。

CREATE TABLE new_tbl SELECT * FROM orig_tbl;


4
+1-ただし、新しいテーブルには最初からのインデックス定義はありません。「作成...のような...」アプローチでは、インデックス定義もコピーされます。
マーティン

2

これでうまくいきました。WHERE句とLIMIT句を使用して、SELECTステートメントをより複雑にすることができます。

最初に大きなテーブル(データなし)を複製し、次のクエリを実行してから、大きなテーブルを切り捨てます。

INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)

超シンプル。:-)


0
CREATE TABLE target_table SELECT * FROM source_table;

ソーステーブルと同じ構造の新しいテーブルを作成し、source_tableからtarget_tableにすべての行をコピーするだけです。

CREATE TABLE target_table SELECT * FROM source_table WHERE condition;

target_tableにコピーする行が必要な場合は、where 句内条件を適用します


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.