次に挙げるのは、MERGE
テーブルに関する既知の問題です。
MERGE
テーブルでは、テーブル全体で
UNIQUE
制約を保持できない。INSERT
を実行すると、INSERT_METHOD=xxx
に応じてデータが最初または最後のテーブルに挿入される。挿入先の
MyISAM
テーブルではそのデータが一意であることが保証されるが、このテーブルは他の
MyISAM
テーブルについてまったく関知しない。
WHERE
なしで DELETE FROM
merge_table
を使用すると、テーブルに対するマッピングのみが消去され、マップされたテーブルの内容は一切削除されない。
アクティブな MERGE
テーブルで使用されているテーブルに対して
RENAME TABLE
を実行すると、テーブルが破損するおそれがある。これは
MySQL 4.1.x で修正される予定。
MERGE
型のテーブルを作成するときに、その構成要素となるテーブルの型に互換性があるか、またはそのテーブル自体が存在するかがチェックされない。MERGE
テーブルが使用される際に、マップされたテーブル間でレコード長が等しいかどうかが
MySQL
によって簡単にチェックされるが、これでは完全な検証にならない。
このような方法で MERGE
をテーブルを使用していると、高い確率で未知の問題が発生する。
ALTER TABLE
を使用して
MERGE
テーブルで使用されているテーブルに
UNIQUE
インデックスを追加した後に、再び
ALTER TABLE
を使用して
MERGE
テーブルに通常のインデックスを追加すると、以前の一意でないキーがテーブルに存在していた場合に、テーブルに対するキーの順序が変わる。これは、重複キーをできるだけ早く検出できるように、ALTER
TABLE
が UNIQUE
キーを通常のキーの前に配置するためである。
Windows では、MERGE
テーブルが使用しているテーブルに対して
DROP TABLE
を実行できない。これは、MERGE
ストレージエンジンが実行するテーブルマッピングを
MySQL
の上位レイヤが認識しないためである。Windows
では開いているファイルを破棄できないため、対象のテーブルを破棄する前に、FLUSH
TABLES
ですべての MERGE
テーブルをフラッシュするか、MERGE
テーブルを破棄する必要がある。これについては、ビューを導入するときに修正する。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.