HOWTO · MySQL

MySQL でデータをコピーせずにテーブル構造をコピーする

このチュートリアルでは、MySQL でデータをコピーせずにテーブル構造をコピーする方法を示します。

このページの内容

今日は、MySQL でデータをコピーせずにテーブル構造をコピーする方法を見ていきます。 CREATE TABLE ... LIKE ステートメントを使用して、テーブル構造のみをコピーします。

MySQL でデータをコピーせずにテーブル構造をコピーする

詳細を学ぶために、users という名前のテーブルを作成してみましょう。このテーブルは、test データベースに存在し、属性として IDUSERNAME、および EMAIL を持ちます。

テーブルを作成します (users テーブル):

#create a table named 'users' in the 'test' database
CREATE TABLE `test`.`users` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `USERNAME` VARCHAR(45) NOT NULL,
  `EMAIL` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`ID`));

次に、データではなく、テーブルの構造のみが新しいテーブルにコピーされることを区別するために、レコードを挿入します。

INSERT INTO `test`.`users` (USERNAME, EMAIL) VALUES ('mehvish', 'delfstack@example.com');

CREATE TABLE ... LIKE を使用して MySQL のテーブル構造をコピーする

以下に示す CREATE TABLE ... LIKE ステートメントを実行することで、テーブル定義とも呼ばれるテーブル構造をコピーできます。

# Syntax: CREATE TABLE new_table LIKE original_table;
CREATE TABLE new_user_one LIKE test.users;

上記のクエリは、users テーブルとまったく同じように new_user_one テーブルの構造を作成します。

すべての列名、データ型、デフォルト値、およびテーブルの内容を除くすべてがコピーされます。 テーブル データはコピーされません。

次のクエリを使用して、新しいテーブルの列名、データ型などを再確認できます。

SHOW CREATE TABLE test.new_user_one;

データを取得する状況がある場合は、2つの方法で行うことができます。 テーブル構造のコピー中にデータをコピーするか、コピー後に挿入します。 両方を以下に示します。

テーブル構造をコピーした後にデータをコピーする:

# Syntax: INSERT INTO new_table SELECT * FROM original_table;
INSERT INTO new_user_one SELECT * FROM test.users;

テーブルの構造をコピーしながらデータをコピーする:

# Syntax: CREATE TABLE new_table AS SELECT * FROM original_table;
CREATE TABLE new_user_two AS SELECT * FROM test.users;

2つ目の方法では、CREATE TABLE ... AS SELECT ステートメントを実行して、テーブルの内容をコピーまたは複製できます。 大きなテーブルがある場合、データのコピーに時間がかかる場合があります。

新しいテーブル (ここでは new_user_two) は、基本的な列の定義、デフォルト値、および null 設定のみをコピーすることに注意してください。 AUTO_INCREMENTINDEXES の定義を継承することはありません。

次のクエリを使用して確認できます。

SHOW CREATE TABLE test.new_user_two;