9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLのテーブル複製コマンドの違い

Last updated at Posted at 2018-06-01

MySQL(MariaDB)にてテーブルの複製コマンドは複数存在するが、
どういった差異があるのかが不明だったので、showコマンドを使用して確認、比較してみた。
結果は下記の通り。

| | データ | index | PK |
| --- | --- | --- | --- | --- |
| create table ・・・ as SELECT文 | 有 | 無 | 無 |
| create table ・・・ (SELECT文) | 有 | 無 | 無 |
| create table ・・・ SELECT文 | 有 | 無 | 無 |
| create table ・・・ like <元テーブル> | 無 | 有 | 有 |

この内容からはcreate table ・・・ like文はテーブル定義を関連オブジェクトも含めて複製するが、
それ以外のcreate table ・・・ SELECT文についてはテーブルとデータの複製を実施する、
というSQLの作り通りの動作が見えた。

create table ・・・ as SELECT文

as
MariaDB [iwate]> create table juve_as as select * from juve where position='MF';
Query OK, 6 rows affected (0.11 sec)
Records: 6  Duplicates: 0  Warnings: 0

MariaDB [iwate]> SHOW CREATE TABLE juve_as;
+---------+--------------------------------------------------------------------
| Table   | Create Table
+---------+--------------------------------------------------------------------
| juve_as | CREATE TABLE `juve_as` (
  `id_no` int(11) NOT NULL COMMENT 'ID',
  `no` varchar(5) NOT NULL COMMENT '背番号',
  `fir_name` varchar(25) DEFAULT NULL COMMENT '名前',
  `fam_name` varchar(25) DEFAULT NULL COMMENT '姓',
  `position` varchar(3) NOT NULL COMMENT 'ポジション'
) ENGINE=InnoDB DEFAULT CHARSET=utf8            |
+---------+--------------------------------------------------------------------
1 row in set (0.00 sec)

create table ・・・ (SELECT文)

()
MariaDB [iwate]> create table juve2 (select * from juve where position='MF');
Query OK, 6 rows affected (0.11 sec)
Records: 6  Duplicates: 0  Warnings: 0

MariaDB [iwate]> SHOW CREATE TABLE juve2;
+-------+-------------------------------------------------------------------------
| Table | Create Table
+-------+-------------------------------------------------------------------------
| juve2 | CREATE TABLE `juve2` (
  `id_no` int(11) NOT NULL COMMENT 'ID',
  `no` varchar(5) NOT NULL COMMENT '背番号',
  `fir_name` varchar(25) DEFAULT NULL COMMENT '名前',
  `fam_name` varchar(25) DEFAULT NULL COMMENT '姓',
  `position` varchar(3) NOT NULL COMMENT 'ポジション'
) ENGINE=InnoDB DEFAULT CHARSET=utf8            |
+-------+-------------------------------------------------------------------------
1 row in set (0.00 sec)

create table ・・・ SELECT文

SELECT文
MariaDB [iwate]> create table juve_non select * from juve where position='MF';
Query OK, 6 rows affected (0.07 sec)
Records: 6  Duplicates: 0  Warnings: 0

MariaDB [iwate]> SHOW CREATE TABLE juve_non;
+---------+--------------------------------------------------------------------
| Table   | Create Table
+---------+--------------------------------------------------------------------
| juve_non | CREATE TABLE `juve_non` (
  `id_no` int(11) NOT NULL COMMENT 'ID',
  `no` varchar(5) NOT NULL COMMENT '背番号',
  `fir_name` varchar(25) DEFAULT NULL COMMENT '名前',
  `fam_name` varchar(25) DEFAULT NULL COMMENT '姓',
  `position` varchar(3) NOT NULL COMMENT 'ポジション'
) ENGINE=InnoDB DEFAULT CHARSET=utf8            |
+---------+--------------------------------------------------------------------
1 row in set (0.00 sec)

create table ・・・ like <元テーブル>

LIKE
MariaDB [iwate]> create table juve_like like juve;
Query OK, 0 rows affected (0.08 sec)

MariaDB [iwate]> SHOW CREATE TABLE juve_like;
+-----------+------------------------------------------------------------------
| Table     | Create Table
+-----------+------------------------------------------------------------------
| juve_like | CREATE TABLE `juve_like` (
  `id_no` int(11) NOT NULL COMMENT 'ID',
  `no` varchar(5) NOT NULL COMMENT '背番号',
  `fir_name` varchar(25) DEFAULT NULL COMMENT '名前',
  `fam_name` varchar(25) DEFAULT NULL COMMENT '姓',
  `position` varchar(3) NOT NULL COMMENT 'ポジション',
  PRIMARY KEY (`id_no`),
  KEY `ix1_juve` (`position`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユベントス'
+-----------+------------------------------------------------------------------
1 row in set (0.00 sec)
9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?