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

MySQLでテーブルをコピーする方法|INSERT INTO SELECT文の使い方を解説

MySQLでテーブルをコピーするには?

MySQLであるテーブルのデータを別のテーブルへ丸ごとコピーしたい場合、INSERT INTO SELECT文を使うことで簡単に実現できます。基本構文は以下の通りです。

INSERT INTO データベース名.コピー先テーブル名(SELECT * FROM データベース名.コピー元テーブル名);

この構文のポイントは、SELECT *で取得した全レコードをそのままINSERT INTOで別テーブルに流し込むという仕組みです。異なるデータベース間でも「データベース名.テーブル名」の形式で指定すればコピーが可能です。

それでは、実際にサンプルを作成しながら動作を確認していきましょう。ここでは、2つの異なるデータベースにそれぞれテーブルを作成し、片方からもう片方へデータをコピーします。

手順1:コピー元のテーブルを作成する

まず、データベース「bothinnodbandmyisam」内にコピー元となるテーブルを作成します。以下のクエリを実行してください。

mysql> create table Student_Information
   -> (
   -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> Name varchar(10),  
   -> Age int
   -> );
Query OK, 0 rows affected (0.67 sec)

テーブルが作成できたら、INSERTコマンドでいくつかレコードを挿入してみましょう。

mysql> insert into Student_Information(Name,Age) values('Larry',30);
Query OK, 1 row affected (0.20 sec)
mysql> insert into Student_Information(Name,Age) values('Mike',26);
Query OK, 1 row affected (0.19 sec)
mysql> insert into Student_Information(Name,Age) values('Bob',26);
Query OK, 1 row affected (0.12 sec)
mysql> insert into Student_Information(Name,Age) values('Carol',24);
Query OK, 1 row affected (0.15 sec)

SELECT文を実行して、登録されたレコードをすべて表示して確認します。

mysql> select *from Student_Information;

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

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
|  1 | Larry |   30 |
|  2 | Mike  |   26 |
|  3 | Bob   |   26 |
|  4 | Carol |   24 |
+----+-------+------+
4 rows in set (0.00 sec)

手順2:コピー先のデータベースとテーブルを準備する

次に、コピー先となる別のデータベース「sample」に切り替えます。

mysql> use sample;
Database changed

このデータベース内に、コピー先のテーブルを1つだけ作成します。カラム構成はコピー元と対応させておく必要がある点に注意しましょう。

mysql> create table Student_Table_sample
   -> (
   -> StudentId int NOT NULL AUTO_INCREMENT,
   -> StudentName varchar(20),
   -> StudentAge int ,
   -> PRIMARY KEY(StudentId)
   -> );
Query OK, 0 rows affected (0.57 sec)

手順3:INSERT INTO SELECT文でテーブルをコピーする

準備が整ったら、いよいよテーブルをコピーします。実行するクエリは以下の通りです。

mysql> insert into sample.Student_Table_sample(select *from bothinnodbandmyisam.Student_Information);
Query OK, 4 rows affected (0.23 sec)
Records: 4 Duplicates: 0 Warnings: 0

実行結果に「4 rows affected(4件のレコードが処理された)」と表示されていることから、テーブルのコピーが正常に完了したことがわかります。「Duplicates: 0」「Warnings: 0」なので、重複や警告も発生していません。

手順4:コピー結果を確認する

最後に、コピー先テーブル「Student_Table_sample」から全レコードを表示して、正しくコピーされているか確認しましょう。

mysql> select *from Student_Table_sample;

実行結果は以下の通りです。別データベースのテーブルからレコードが正しくコピーされていることが確認できます。

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|         1 | Larry       |         30 |
|     2 | Mike        |         26 |
|         3 | Bob         |         26 |
|         4 | Carol       |         24 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

まとめ

MySQLでテーブルをコピーする場合は、INSERT INTO SELECT文を利用します。「データベース名.テーブル名」の形式で指定すれば、データベースが異なっていてもデータをコピーできるのが大きな特徴です。

なお、この方法でコピーされるのはデータのみであり、インデックスや外部キー制約などのテーブル構造自体はコピーされません。構造も含めて完全に複製したい場合は、「CREATE TABLE コピー先 AS SELECT * FROM コピー元」を使う方法もありますので、目的に応じて使い分けるとよいでしょう。

  1. MySQLで日付型カラムにNULLを挿入する方法|ALTER TABLEによるカラム定義の変更手順

    日付型(DATE)カラムにNULLを挿入したい場合、ALTER TABLE文とMODIFY句を使って、カラム定義をNULL許可に変更する必要があります。基本の構文alter table テーブル名 modify column カラム名 date NULL;既存のテーブル構造はそのままに、指定したカラムだけをNULLを許容する形へ変更できます。検証用テーブルを作成するまず、日付カラムをNOT NULLとして定義したテーブルを作成します。mysql> create table DemoTable ( ShippingDate date NOT NULL ); Query OK, 0

  2. MySQLでvarcharカラムのIPアドレスを整数に変換・コピーする方法【INET_ATON()】

    INET_ATON()関数とはvarchar型のカラムに保存されたIPアドレスを、同じテーブル内で整数値に変換したい場合は、MySQLのINET_ATON()関数を使用します。この関数は、ドット区切り(例:「192.168.120.0」)のIPアドレス文字列を32ビットの数値に変換します。IPアドレスを整数として扱うことで、保存サイズの節約や、範囲条件での検索効率の向上といったメリットが得られます。ステップ1:サンプルテーブルの作成まず、IPアドレスをvarchar型で保存するテーブルを作成しましょう。mysql> create table DemoTable1404 ->