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 コピー元」を使う方法もありますので、目的に応じて使い分けるとよいでしょう。
-
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
-
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 ->