MySQLで既存のテーブルから新しいテーブルを作成する方法(CREATE TABLE ... LIKE)
MySQLでは、CREATE TABLEコマンドを使うことで、既存のテーブルと同じ構造を持つ新しいテーブルを簡単に作成できます。カラム定義やインデックス、主キーなどを一から書き直す必要がないため、テーブルの複製やバックアップ用テーブルの作成に非常に便利です。
基本構文
既存のテーブルから新しいテーブルを作成するには、LIKE句を使用します。構文は以下の通りです。
CREATE TABLE 新しいテーブル名 LIKE 既存のテーブル名;
この構文を実行すると、元のテーブルのカラム定義、データ型、NULL許可、デフォルト値、主キー、インデックスなどがすべてそのままコピーされます。なお、テーブル内のデータまではコピーされない点に注意してください。
サンプルテーブルの作成
まずは動作を確認するため、元となるテーブルを作成しましょう。以下のクエリを実行します。
mysql> create table ShowCreateTableCommand
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> FirstName varchar(20),
-> LastName varchar(20),
-> Age int,
-> TotalMarks int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.22 sec)DESCコマンドでテーブル構造を確認する
作成したテーブルの構造は、DESCコマンドで確認できます。
mysql> desc ShowCreateTableCommand;
実行結果は以下の通りです。
+------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | FirstName | varchar(20) | YES | | NULL | | | LastName | varchar(20) | YES | | NULL | | | Age | int(11) | YES | | NULL | | | TotalMarks | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+----------------+ 5 rows in set (0.11 sec)
SHOW CREATE TABLEで詳細な定義を確認する
より詳細なテーブル定義(ストレージエンジンや文字セットなど)を確認したい場合は、SHOW CREATE TABLEを使用します。
mysql> show create table ShowCreateTableCommand\G
実行結果は以下の通りです。
*************************** 1. row ***************************
Table: ShowCreateTableCommand
Create Table: CREATE TABLE `showcreatetablecommand` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(20) DEFAULT NULL,
`LastName` varchar(20) DEFAULT NULL,
`Age` int(11) DEFAULT NULL,
`TotalMarks` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci
1 row in set (0.00 sec)既存テーブルから新しいテーブルを作成する
それでは、CREATE TABLE ... LIKEを使って、既存のテーブルから新しいテーブルを作成してみましょう。
mysql> CREATE TABLE StudentInformationDemo LIKE ShowCreateTableCommand; Query OK, 0 rows affected (0.49 sec)
新テーブルの構造が元テーブルと一致しているか確認する
最後に、新しく作成したテーブルの構造が元のテーブルと一致しているかを確認します。
mysql> show create table StudentInformationDemo\G
実行結果は以下の通りです。
*************************** 1. row ***************************
Table: StudentInformationDemo
Create Table: CREATE TABLE `studentinformationdemo` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(20) DEFAULT NULL,
`LastName` varchar(20) DEFAULT NULL,
`Age` int(11) DEFAULT NULL,
`TotalMarks` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci
1 row in set (0.00 sec)このように、出力結果を見るとStudentInformationDemoテーブルが、元のShowCreateTableCommandテーブルと完全に同じ構造(カラム定義・主キー・エンジン・文字セット)で作成されていることがわかります。
まとめ
CREATE TABLE 新テーブル名 LIKE 既存テーブル名;でテーブル構造を丸ごと複製できる- コピーされるのは構造のみで、データは含まれない
- データごとコピーしたい場合は
INSERT INTO 新テーブル名 SELECT * FROM 既存テーブル名;を併用する
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)
-
MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方
MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec