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

MySQLで既存のテーブルから新しいテーブルを作成する方法(CTAS構文の使い方)

MySQLでは、CTAS(Create Table AS Select)と呼ばれる構文を使うことで、データベース内にすでに存在するテーブルをもとに、新しいテーブルを簡単に作成できます。この方法の大きな特徴は、元のテーブルの構造(カラム定義)とデータの両方をまとめてコピーできる点です。

CTAS(CREATE TABLE AS SELECT)とは

CTASは「CREATE TABLE 新しいテーブル名 AS SELECT ~」という形式で記述し、SELECT文の結果をそのまま新しいテーブルとして保存します。バックアップテーブルの作成や、テスト用のデータ複製などによく使われる便利な構文です。

実行例:Employeeテーブルからバックアップを作成する

ここでは、すでに存在する「Employee」テーブルから「EMP_BACKUP」という名前のテーブルを作成してみましょう。まず、元となるEmployeeテーブルの中身を確認します。

mysql> SELECT * FROM Employee;
+------+--------+
| Id   | Name   |
+------+--------+
| 100  | Ram    |
| 200  | Gaurav |
| 300  | Mohan  |
+------+--------+
3 rows in set (0.00 sec)

次に、以下のクエリを実行すると、Employeeテーブルの構造とデータをそのまま引き継いだ「EMP_BACKUP」テーブルが作成されます。

mysql> CREATE TABLE EMP_BACKUP AS SELECT * FROM EMPLOYEE;
Query OK, 3 rows affected (0.15 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM EMP_BACKUP;
+------+--------+
| Id   | Name   |
+------+--------+
| 100  | Ram    |
| 200  | Gaurav |
| 300  | Mohan  |
+------+--------+
3 rows in set (0.00 sec)

実行結果を見ると、Employeeテーブルのすべてのデータと構造がEMP_BACKUPテーブルへ正しくコピーされていることが確認できます。

注意点:インデックスや主キーはコピーされない

CTASはデータと基本構造をコピーしますが、主キー(PRIMARY KEY)、インデックス、AUTO_INCREMENT属性、外部キー制約などは引き継がれない点に注意が必要です。これらの定義ごと完全に複製したい場合は、「CREATE TABLE 新しいテーブル名 LIKE 元のテーブル名」で構造のみを先にコピーしてから、INSERT文でデータを移行する方法が推奨されます。

  1. MySQLでデータベース内のテーブル名一覧を取得する方法

    MySQLでデータベースに存在するテーブル名の一覧を取得したい場合は、SHOW TABLESステートメントを使用します。SQLクライアントやコマンドラインから手軽に実行でき、指定したデータベース内の全テーブルを簡単に確認できます。基本構文テーブル名を取得するための基本構文は以下のとおりです。show tables from yourDatabaseName;yourDatabaseName の部分に、対象となるデータベース名を指定してください。実行例それでは、サンプルデータベース「hb_student_tracker」に対して実際にクエリを実行し、テーブル名を取得してみましょう。mysql&g

  2. PythonとMySQLでデータベースからテーブルを削除する方法【DROP TABLE文の使い方】

    データベースからテーブル全体を削除する必要が生じる場合があります。不要になったデータをデータベースに残しておくのは、ストレージの無駄につながります。たとえば、データベースに「Employees」というテーブルがあり、何らかの理由でそのテーブルが不要になったとしましょう。このような場合は、不要となったテーブルを削除してしまうのが最善の対応です。テーブルの削除には「DROP TABLE」コマンドを使用します。このコマンドを実行すると、データベースからテーブル全体が完全に削除されます。構文DROP TABLE table_nametable_name の部分には、削除したいテーブルの名前を指定します