CREATE TABLE … AS SELECT構文によって、既存テーブルを元に新規で作成したテーブルは、InfiniDBではなく、デフォルトのストレージエンジンであるMyISAMに作成されます。
※注意!※
InfiniDBはテーブル作成時に「ENGINE = InfiniDB」でエンジンを指定する必要があります。
現在(2014/8 バージョン4.5以下)の仕様上、この構文でInfiniDBストレージエンジンを指定してテーブルを作成することはできません。
InfiniDBはテーブル作成時に「ENGINE = InfiniDB」でエンジンを指定する必要があります。
現在(2014/8 バージョン4.5以下)の仕様上、この構文でInfiniDBストレージエンジンを指定してテーブルを作成することはできません。
CREATE TABLE…AS SELECTのような処理を行いたい場合は、CREATE TABLEとcpimportを組み合わせる処理で代替することができます。
動作確認例
t1テーブルのデータをCREATE TABLEとcpimportを使って、t2テーブルにコピーする手順を確認します。1.CREATE TABLE文で空のt2テーブルを作成します。
1 2 |
mysql> CREATE TABLE t2 (hanbai_date date,hinmei varchar(100)) ENGINE=InfiniDB; Query OK, 0 rows affected (0.23 sec) |
2.ログアウトします。
1 2 |
mysql> exit Bye |
3.SELECTを組み合わせてcpimportを実行します。
以下のように記述すると、SELECT文の結果をcpimportを使って手順1)で作成した空のテーブルにロードすることができます。
1 2 3 4 |
# idbmysql -e 'SELECT文' -N データベース名 | cpimport データベース名 テーブル名 -s '\t' 例)t1テーブルをSELECTした結果をtestデータベースのt2テーブルにロードする場合 # idbmysql -e 'SELECT * FROM t1 WHERE hanbai_date < "2013-12-31";' -N test | cpimport test t2 -s '\t' |
4.t2テーブルを検索します。
手順3)でロードしたデータが挿入されていることが確認できます。
1 2 3 4 5 6 7 |
mysql> SELECT * FROM t2; +-------------+-----------+ | hanbai_date | hinmei | +-------------+-----------+ | 2013-12-20 | りんご | +-------------+-----------+ 1 row in set (0.12 sec) |
テーブルのストレージエンジンもInfiniDBで作成されています。
1 2 3 4 5 6 7 8 9 10 |
mysql> SHOW CREATE TABLE t2; +-------+-----------------------------+ | Table | Create Table +-------+---------------------------+- | t2 | CREATE TABLE `t2` ( `hanbai_date` date DEFAULT NULL, `hinmei` varchar(100) DEFAULT NULL ) ENGINE=InfiniDB DEFAULT CHARSET=utf8 | +-------+------------------------------+ 1 row in set (0.00 sec) |