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

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 既存テーブル名; を併用する
  1. 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)

  2. MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方

    MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec