1. はじめに
MySQLでのテーブルコピーは、データベース運用において頻繁に利用される操作のひとつです。既存のテーブルを複製することで、データのバックアップやテスト環境の構築が簡単に行えます。本記事では、MySQLでテーブルをコピーするさまざまな方法について、手順やメリット、注意点を含めて詳しく解説します。
2. テーブルコピーの基本概念と用途
テーブルコピーには、「構造のみをコピーする方法」、「構造とデータをコピーする方法」、「インデックスや制約を含めた完全なコピー」という3つの基本的な方法があります。用途に応じて最適な方法を選びましょう。
テーブルコピーの主な用途
- データのバックアップ: データ保全のため、テーブルを定期的にバックアップしておくと安心です。
- テスト環境の構築: 新しいデータや機能のテストに使用する複製データが必要な場合に便利です。
- システム移行や最適化: テーブル構造の変更を伴う移行の準備にも使用されます。
3. テーブル構造のみをコピーする方法
テーブルの構造だけをコピーしたい場合、CREATE TABLE ... LIKE
文が便利です。この方法では、テーブルのスキーマ(列の構成やデータ型)だけが複製され、データは含まれません。
CREATE TABLE … LIKE文の使用方法
- 基本構文
CREATE TABLE 新しいテーブル名 LIKE 元のテーブル名;
- 使用例
例えば、employees
テーブルの構造のみを複製して、新たにemployees_backup
テーブルを作成する場合のSQL文は以下の通りです。
CREATE TABLE employees_backup LIKE employees;
- メリット
この方法は非常にシンプルであり、テーブルの列構成をそのままコピーすることが可能です。インデックスや制約もコピーされるため、基本的なテーブル構造を複製したい場合に適しています。 - 注意点
データはコピーされません。また、カスタマイズされた外部キー制約などがある場合、他のテーブルとの依存関係が再設定されない点に注意してください。

4. テーブル構造とデータを同時にコピーする方法
テーブルの構造だけでなく、データも同時にコピーする場合は、CREATE TABLE ... AS SELECT
文を使用します。これは、新しいテーブルにデータごと複製したい場合に便利です。
CREATE TABLE … AS SELECT文の使用方法
- 基本構文
CREATE TABLE 新しいテーブル名 AS SELECT * FROM 元のテーブル名;
- 使用例
例えば、employees
テーブルの構造とデータを新しいemployees_full_backup
テーブルに複製する場合は、以下のSQL文を使用します。
CREATE TABLE employees_full_backup AS SELECT * FROM employees;
- メリット
構造とデータが一度にコピーされるため、テーブルを丸ごとバックアップするのに最適です。 - 注意点
インデックスや外部キー制約はこの方法ではコピーされません。必要であれば、データをコピーした後にインデックスや制約を手動で再設定する必要があります。
5. インデックスや制約を含めて完全にコピーする方法
テーブルを完全に複製し、インデックスや制約も含めたい場合には、CREATE TABLE ... LIKE
文とINSERT INTO ... SELECT
文を組み合わせて使用します。
CREATE TABLE … LIKE文とINSERT INTO … SELECT文の組み合わせ
- 手順
CREATE TABLE ... LIKE
で構造をコピーします。INSERT INTO ... SELECT
でデータを挿入します。
- 使用例
CREATE TABLE employees_full_copy LIKE employees;
INSERT INTO employees_full_copy SELECT * FROM employees;
- メリット
インデックスや制約が保持された完全なコピーが作成できるため、データベースのバックアップや複製の際に最適です。 - 注意点
データ量が多い場合、INSERT操作に時間がかかることがあります。また、インデックスや外部キーが多いと、サーバーの負荷が一時的に上がることがあります。

6. 異なるデータベース間でのテーブルコピー
別のデータベースにテーブルをコピーする際には、データベース名を指定して、コピー元とコピー先のテーブルを区別します。
異なるデータベース間でのコピー方法
- 基本構文
CREATE TABLE 新しいデータベース.新しいテーブル AS SELECT * FROM 元のデータベース.元のテーブル;
- 使用例
test_db
データベースからbackup_db
データベースにemployees
テーブルをコピーする例です。
CREATE TABLE backup_db.employees_copy AS SELECT * FROM test_db.employees;
- 注意点
異なるデータベースにテーブルをコピーする際には、ユーザー権限やデータベース間の接続に関する設定が必要になる場合があります。
7. phpMyAdminを使用したテーブルコピー
phpMyAdminを使用することで、GUIで簡単にテーブルのコピーを行えます。この方法はSQL操作に不慣れな方にもおすすめです。
phpMyAdminでの手順
- phpMyAdminにログインし、コピーしたいテーブルを選択します。
- 「操作」タブから「テーブルのコピー」を選びます。
- 「構造のみ」または「構造とデータ」を選択し、新しいテーブル名を指定して実行します。
メリット
GUIでの操作が簡単に行え、SQL文を書く必要がないため、初心者でも手軽に利用できます。
注意点
phpMyAdminの操作中に確認メッセージが表示されることがあるので、特に権限を変更する場合などは慎重に選択しましょう。
8. テーブルコピー時の注意点とベストプラクティス
テーブルをコピーする際には、データの一貫性やパフォーマンスに配慮し、必要に応じてトランザクションを使用すると良いでしょう。
コピー時の注意点
- データの一貫性
データが頻繁に更新される環境では、コピーする前にテーブルをロックするか、トランザクションを使用してデータの一貫性を保つようにします。 - パフォーマンス
大規模なテーブルをコピーするときにはサーバーに負荷がかかります。ピーク時間を避けてコピーを実行するか、バックアップツールを活用しましょう。 - バックアップの確保
万が一のエラーやデータ損失に備えて、コピー前にバックアップを取ることをお勧めします。
9. まとめ
MySQLでテーブルをコピーする方法にはさまざまな選択肢があります。テーブル構造のみのコピー、データを含めたコピー、インデックスや制約を含めた完全コピーと、用途に応じて最適な方法を選んでください。本記事を参考に、データ管理を効率よく行いましょう。