MySQL でデータをコピーせずにテーブル構造をコピーする
今日は、MySQL でデータをコピーせずにテーブル構造をコピーする方法を見ていきます。 CREATE TABLE ... LIKE
ステートメントを使用して、テーブル構造のみをコピーします。
MySQL でデータをコピーせずにテーブル構造をコピーする
詳細を学ぶために、users
という名前のテーブルを作成してみましょう。このテーブルは、test
データベースに存在し、属性として ID
、USERNAME
、および 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_INCREMENT
と INDEXES
の定義を継承することはありません。
次のクエリを使用して確認できます。
SHOW CREATE TABLE test.new_user_two;