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)