SQLコマンドを使用して、テーブルをInnoDBからARCHIVEに変更してみます。
ALTER TABLE data_obook ENGINE = ARCHIVE;
ただし、常にエラーのみが表示されます。
#1005 - Can't create table 'coincity.#sql-1350_8a' (errno: -1)
私の構造:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `data_obook` (
`market_id` int(6) NOT NULL,
`curr_id` int(4) NOT NULL,
`book_id` bigint(20) NOT NULL,
`type` varchar(5) NOT NULL,
`price` float NOT NULL,
`amount` double NOT NULL,
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`market_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
誰かが解決策を手伝ってくれる?ありがとうございました。
ARCHIVE Storage Engine はいかなる種類のインデックスもサポートしないため、主な問題は_PRIMARY KEY
_の存在です。 _PRIMARY KEY
_をドロップするだけです。次に、ストレージエンジンを変換します。
これには2つのアプローチがあります
_ALTER TABLE date_obook DROP PRIMARY KEY;
ALTER TABLE date_obook ENGINE=ARCHIVE;
_
_CREATE TABLE date_obook_new LIKE date_obook;
ALTER TABLE date_obook_new DROP PRIMARY KEY;
ALTER TABLE date_obook_new ENGINE=ARCHIVE;
INSERT INTO date_obook_new SELECT * FROM date_obook;
ALTER TABLE date_obook RENAME date_obook_old;
ALTER TABLE date_obook_new RENAME date_obook;
DROP TABLE date_obook_old;
_
_PRIMARY KEY
_属性を持つ_AUTO_INCREMENT
_を誰かが持っている場合は、最初に_AUTO_INCREMENT
_属性を削除する必要があります。次に、_PRIMARY KEY
_を削除してから、ストレージエンジンを変換します。たとえば、_market_id
_がint(6) NOT NULL AUTO_INCREMENT
として定義されている場合は、次のようにします。
_ALTER TABLE date_obook MODIFY market_id INT NOT NULL;
ALTER TABLE date_obook DROP PRIMARY KEY;
ALTER TABLE date_obook ENGINE=ARCHIVE;
_
ARCHIVE
エンジンは自動インクリメントカラムを持つことができ、そのためにはインデックスが必要です。
ドキュメント( 5.5 、 5.6 、 5.7 )に従って:
ARCHIVEエンジンはAUTO_INCREMENT列属性をサポートしています。 AUTO_INCREMENT列には、一意のインデックスまたは一意でないインデックスのいずれかを含めることができます。他の列にインデックスを作成しようとすると、エラーが発生します。 ARCHIVEエンジンは、CREATE TABLEステートメントのAUTO_INCREMENTテーブルオプションもサポートし、新しいテーブルの初期シーケンス値を指定したり、既存のテーブルのシーケンス値をリセットしたりします。
_ALTER TABLE my_table AUTO_INCREMENT=0, ENGINE=ARCHIVE;
_
_AUTO_INCREMENT
_をリセットしないと、ERROR 1022 (23000): Can't write; duplicate key in table
で失敗します
_PRIMARY KEY
_が自動インクリメントでないときにこれを実行しようとすると、次のようになります。
_mysql [localhost] {root} (test) > create table foo (id int primary key);
Query OK, 0 rows affected (0.09 sec)
mysql [localhost] {root} (test) > alter table foo engine=archive;
ERROR 1030 (HY000): Got error -1 from storage engine
_