MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで1つのテーブルからすべてのレコードを別のテーブルにコピーする方法(CREATE TABLE AS SELECT活用術)

MySQLでは、CREATE TABLE AS SELECTステートメントを使うことで、既存テーブルのすべてのレコードを簡単に新しいテーブルへコピーできます。この記事では、実際のSQL例とともにその手順をわかりやすく解説します。

CREATE TABLE AS SELECTステートメントとは

CREATE TABLE AS SELECTは、SELECT文の実行結果をもとに新しいテーブルを作成する構文です。元テーブルの構造とデータをまとめて複製できるため、テーブルのバックアップやデータ移行の際に非常に便利です。

サンプルテーブルの作成

まず、コピー元となるテーブルを作成しましょう。

mysql> create table DemoTable1518
    -> (
    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName varchar(20)
    -> )AUTO_INCREMENT=101;
Query OK, 0 rows affected (0.69 sec)

このテーブルは、自動採番される「EmployeeId」を主キーとしており、AUTO_INCREMENTの開始値を101に設定しています。

レコードの挿入

INSERTコマンドを使って、いくつかのレコードを追加します。

mysql> insert into DemoTable1518(EmployeeName) values('John Doe');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1518(EmployeeName) values('John Smith');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1518(EmployeeName) values('David Miller');
Query OK, 1 row affected (0.14 sec)

テーブルの内容を確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1518;

実行すると、次のような出力が得られます。

+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
|        101 | John Doe     |
|        102 | John Smith   |
|        103 | David Miller |
+------------+--------------+
3 rows in set (0.00 sec)

別のテーブルへすべてのレコードを挿入する

いよいよ本題です。次のクエリを実行すると、DemoTable1518の全レコードを新しいテーブルDemoTable1519へ一括コピーできます。

mysql> create table DemoTable1519 as select * from DemoTable1518;
Query OK, 3 rows affected (0.62 sec)
Records: 3  Duplicates: 0  Warnings: 0

「Records: 3」と表示されているように、3件のレコードが重複や警告なく正常にコピーされました。

コピー先テーブルの確認

SELECT文でコピー先のテーブルの中身を確認します。

mysql> select * from DemoTable1519;

実行結果は以下の通りです。

+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
|        101 | John Doe     |
|        102 | John Smith   |
|        103 | David Miller |
+------------+--------------+
3 rows in set (0.00 sec)

元テーブルとまったく同じデータが、新しいテーブルに正しく複製されていることが確認できました。

まとめ

CREATE TABLE AS SELECTを使えば、たった1つのSQL文でテーブルの構造とデータを丸ごと複製できます。ただし、この方法では主キーやAUTO_INCREMENT属性、インデックスなどの一部情報が引き継がれない場合がある点には注意が必要です。完全なテーブル定義ごと複製したい場合は、SHOW CREATE TABLEで構造を確認したり、mysqldumpを利用したりするのがおすすめです。

  1. 【MySQL】別のテーブルのデータを参照してテーブルを更新する方法(UPDATE+JOIN)

    MySQLでは、UPDATEコマンドとJOINを組み合わせることで、別のテーブルのデータを参照しながら、対象のテーブルを効率的に更新できます。本記事では、2つのテーブルを使った具体的なサンプルを通じて、その手順をわかりやすく解説します。 手順1:参照元のテーブルを作成する まず、氏名データを保持する1つ目のテーブル「demo54」を作成します。 mysql> create table demo54-> (-> firstName varchar(20),-> lastName varchar(20)-> );Query OK, 0 rows affected (

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi