受講料が最大70%OFF 受講料が最大70%OFF

データベースを利用しているとバックアップを取る際や、既存テーブルと同じ構成のテーブルを作成したいなどの理由で、テーブルをコピーしたいケースに遭遇します。

今回はMySQLで既存テーブルを新規テーブルとしてコピーする方法について、ご紹介していきたいと思います。

ポテパンダの一言メモ

ご紹介する内容はMySQLで利用可能なコマンドです。
データベース毎に利用出来るコマンドが異なりますので、適宜読み替えてお試しください。

テーブルから定義だけをコピーするSQLコマンド


最初にご紹介するのは、テーブルから定義情報だけをコピーした新しいテーブルを作成するSQLコマンドです。

既存のテーブルに格納されているデータについてはコピーされません。

コピー用のテーブル作成

まず今回サンプルとしてコピーするためのテーブルを作成します。

シンプルな「user」という名前のテーブルを作成しましょう。

CREATE TABLE user(id int primary key, name varchar(30) not null, age int default 0);

作成したテーブルの定義は下記のコマンドで確認可能です。

show create table user \G
ポテパンダの一言メモ

確認コマンドで末尾に「;」を付けるとエラーが表示されます。
上記コマンドでは、末尾に「;」を付ける必要はありません。

実行すると下記のようにテーブル情報が表示されます。

       Table: user
Create Table: CREATE TABLE `user` (
  `id` int NOT NULL,
  `name` varchar(30) NOT NULL,
  `age` int DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

データ投入

テーブル定義だけをコピー出来ているか確認するために、いくつかのデータを投入しておきたいと思います。

今回は下記のデータを格納しました。

+----+-----------------+------+
| id | name            | age  |
+----+-----------------+------+
|  1 | 山田太郎         |   30 |
|  2 | 山田花子         |   25 |
|  3 | 鈴木じろう       |   20 |
+----+-----------------+------+

ポテパンダの一言メモ

あくまでサンプルですので、投入するデータはなんでも構いません。

テーブル定義コピーコマンド

では実際にテーブルの定義のみをコピーして新しいテーブルを作成してみましょう。

基本構文は下記の通りです。

CREATE TABLE 新しいテーブル名 LIKE コピー元のテーブル名;

実際に新しいテーブル名を「user_copy」という名前で作成してみたいと思います。

CREATE TABLE user_copy LIKE user;

上記でご紹介した「SHOW」コマンドを利用してテーブル定義を確認してみましょう。

       Table: user_copy
Create Table: CREATE TABLE `user_copy` (
  `id` int NOT NULL,
  `name` varchar(30) NOT NULL,
  `age` int DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

「user」テーブルと全く同じ定義で作成されています。

ちなみにselect文でデータを確認してみると下記のように空の状態が確認できます。

Empty set (0.00 sec)

テーブルのデータを丸ごと新規テーブルにコピーするSQLコマンド


続いてテーブルに格納されたデータを丸ごとコピーした状態で、新規テーブルを作成する方法についてご紹介したいと思います。

コピー元テーブルには、上記で作成した「user」テーブルを引き続き利用していきます。

テーブルコピー(データ含)

データを含んで新規テーブルにテーブルをコピーするには「SELECT」コマンドを利用します。

基本構文は下記の通りです。

CREATE TABLE 新しいテーブル名 SELECT * FROM コピー元のテーブル名;

今回は新しいテーブル名を「user_copy2」としてコマンドを実行してみたいと思います。

CREATE TABLE user_copy2 SELECT * FROM user;

実行した結果をSELECT文で確認すると、データが丸ごと新規テーブルで格納されていることがわかります。

+----+-----------------+------+
| id | name            | age  |
+----+-----------------+------+
|  1 | 山田太郎         |   30 |
|  2 | 山田花子         |   25 |
|  3 | 鈴木じろう       |   20 |
+----+-----------------+------+

同じくSHOWコマンドでテーブル定義についても確認しておきましょう。

       Table: user_copy2
Create Table: CREATE TABLE `user_copy2` (
  `id` int NOT NULL,
  `name` varchar(30) NOT NULL,
  `age` int DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

コピー元と同じテーブル名とデータ型でテーブルが作成されていますね。

ポテパンダの一言メモ

PRIMARYキーなど引き継がれない定義も存在するため、完全に同じテーブル定義としてコピーされるわけではありません。
テーブル構造をそのままコピーしたい場合には、最初にご紹介したLIKEを利用したコマンドでテーブルをコピーし、データは別途インサートする必要があります。

特定のカラムだけでコピーすることも可能

コピー元のテーブルから、必要なカラムだけを抽出した新規テーブルを作成することも可能です。

CREATE TABLE 新しいテーブル名 SELECT カラム名(, カラム名, ...) FROM コピー元のテーブル名; 

今回はサンプルからidとnameのカラムだけに絞った新規テーブルを作成してみましょう。

CREATE TABLE user_copy3 SELECT id, name FROM user;

実行した後、SELECT文で内容を確認すると下記のように表示されます。

+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | 山田太郎         |
|  2 | 山田花子         |
|  3 | 鈴木じろう       |
+----+-----------------+

テーブル定義についても確認してみましょう。

       Table: user_copy3
Create Table: CREATE TABLE `user_copy3` (
  `id` int NOT NULL,
  `name` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

指定したカラムの情報だけがコピーされていますね。

さいごに:SQLでのテーブルコピーは意外とよく利用される


本記事では、SQLでテーブルをコピーする方法についてご紹介してきました。

上述したように、大きく2種類の方法が存在し、どちらもテーブルをコピーすることに変わりありませんが、内容が若干異なります。

ご自身の利用用途に合わせて、適切なSQLのテーブルコピーコマンドを活用してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。