このページは機械翻訳したものです。
      MERGE テーブルの既知の問題点は次のとおりです。
    
- 
5.1.23 バージョンより前の MySQL Server では、MyISAM の非一時的な子供のテーブルを持つ一時的なマージテーブルを作成できました。 バージョン 5.1.23 からは、MERGE の子供は親のテーブルを介してロックされました。 親が一時的であった場合、親がロックされなかったため、子供もロックされませんでした。 MyISAM テーブルを同時に使用すると、テーブルが破損しました。 
- ALTER TABLEを使用して- MERGEテーブルを別のストレージエンジンに変えると、基礎テーブルへのマッピングが失われます。 その代わり、変更されたテーブルに基礎- MyISAMテーブルの行がコピーされ、そのときに、指定されたストレージエンジンを使用します。
- MERGEテーブルの- INSERT_METHODテーブルオプションは、- MERGEテーブルへの挿入にどの基礎- MyISAMテーブルを使用するかを示します。 ただし、その- MyISAMテーブルに- AUTO_INCREMENTテーブルオプションを使用しても、1 つ以上の行が- MyISAMテーブルに直接挿入されるまで、- MERGEテーブルへの挿入は有効になりません。
- MERGEテーブルは、テーブル全体に一意制約を保持できません。- INSERTを実行すると、データは最初または最後の- MyISAMテーブル (- INSERT_METHODオプションで指定されます) に入ります。 MySQL は一意のキー値が- MyISAMテーブル内で一意のままであることを保証しますが、コレクション内のすべての基礎テーブルには保証しません。
- 
MERGEエンジンは基本テーブルセットに一意性を適用できないため、REPLACEは期待どおりに機能しません。 次の 2 つの重要な事実があります。- REPLACEは、書き込もうとする基礎テーブルでのみ一意キー違反を検出できます (- INSERT_METHODオプションで指定されます)。 これは- MERGEテーブル自体の違反とは異なります。
- REPLACEは、一意キー違反を検出すると、書込み先の基礎となるテーブル (つまり、- INSERT_METHODオプションで決定された最初または最後のテーブル) の対応する行のみを変更します。
 INSERT ... ON DUPLICATE KEY UPDATEについても同様な考慮が適用されます。
- MERGEテーブルはパーティション化をサポートしていません。 つまり、- MERGEテーブルも、- MERGEテーブルの基礎- MyISAMテーブルもパーティション化できません。
- 
開いた MERGEテーブルにマッピングされたどのテーブルにも、ANALYZE TABLE、REPAIR TABLE、OPTIMIZE TABLE、ALTER TABLE、DROP TABLE、DELETE(WHERE句なし)、またはTRUNCATE TABLEを使用すべきではありません。 そうする場合、MERGEテーブルは引き続き元のテーブルを参照しているため、予期しない結果となる可能性があります。 この問題に対処するには、名前付きの操作を行う前にFLUSH TABLESステートメントを発行することで、確実にMERGEテーブルが開いたままにならないようにします。予期しない結果には、 MERGEテーブルに対する操作でテーブルの破損が報告される可能性があります。 基礎MyISAMテーブルで名前付き操作のあとにこれが発生した場合、破損メッセージは偽りです。 これに対処するには、MyISAMテーブルを変更したあとでFLUSH TABLESステートメントを発行します。
- MERGEストレージエンジンのテーブルマッピングは MySQL の上位レイヤーから隠れているので、- MERGEテーブルによって使用されているテーブルでの- DROP TABLEは Windows では機能しません。 Windows では開いているファイルの削除を許可しないため、最初にすべての- MERGEテーブルをフラッシュするか (- FLUSH TABLESを使用します)、テーブルを削除する前に- MERGEテーブルを削除する必要があります。
- MyISAMテーブルと- MERGEテーブルの定義は、テーブルにアクセスするときにチェックされます (たとえば、- SELECTまたは- INSERTステートメントの一部として)。 このチェックは、テーブルの定義と親の- MERGEテーブルの定義が、カラムの順番、タイプ、サイズ、および関連するインデックスを比較することで一致することを保証します。 テーブル間で違いがある場合、エラーが戻され、ステートメントは失敗します。 これらのチェックはテーブルが開かれたときに行われるため、カラムの変更、カラムの順序付け、エンジンの変更など、単一のテーブルの定義を変更すると、ステートメントが失敗します。
- MERGEテーブルと、その基礎テーブルのインデックスの順番は同一でなければいけません。- ALTER TABLEを使用して、- MERGEテーブル内で使用されるテーブルに- UNIQUEインデックスを追加し、次に- ALTER TABLEを使用して- MERGEテーブル上に一意でないインデックスを追加した場合、基礎テーブル内に一意でないインデックスがすでに存在していると、それらのテーブルのインデックス順序は異なります。 (これが発生するのは、重複キーをすばやく検出できるように- ALTER TABLEが一意でないインデックスの前に- UNIQUEインデックスを配置するためです。) その結果、このようなインデックスを持つテーブルに対するクエリーは予想外の結果をもたらす可能性があります。
- ERROR 1017 (HY000): Can't find file: ' - tbl_name.MRG' (errno: 2)エラーメッセージが表示された場合、一般的に、いくつかの基礎テーブルが- MyISAMストレージエンジンを使用していないことを表しています。 これらのテーブルがすべて- MyISAMであることを確認してください。
- MERGEテーブルの行の最大値は 264 です (~1.844E+19 で、- MyISAMテーブルの場合と同じ)。 複数の- MyISAMテーブルを、この数よりも多くの行を含む単一の- MERGEテーブルにマージできません。
- 親の - MERGEテーブルを持つ、異なる行フォーマットの基礎- MyISAMテーブルを使用すると、現在失敗することが知られています。 バグ #32364 を参照してください。
- 
LOCK TABLESが実施されているときは、非一時的なMERGEテーブルの結合リストを変更できません。 次は動作しません。CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...; LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE; ALTER TABLE m1 ... UNION=(t1,t2) ...;ただし、一時的な MERGEテーブルではこれを行うことができます。
- 
一時的な MERGEとしても、非一時的なMERGEテーブルとしても、CREATE ... SELECTでMERGEテーブルを作成できません。 例:CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;これを試みると、 tbl_nameはBASE TABLEではないというエラーとなります。
- あるケースでは、 - MERGEと基礎テーブル間で- PACK_KEYSテーブルオプション値が異なると、基礎テーブルに- CHARまたは- BINARYカラムが含まれている場合、予期しない結果になります。 回避策として、- ALTER TABLEを使用して、関係するすべてのテーブルの- PACK_KEYS値が同じであることを保証します。 (Bug #50646)