すべてのプロダクト
Search
ドキュメントセンター

PolarDB:UNIQUE CHECK IGNORE

最終更新日:Jul 17, 2026

PolarDB for MySQL は、プライマリキーにパーティションキー列が含まれないパーティションテーブル (UNIQUE CHECK IGNORE、略して UCI) をサポートしています。 UCI は データベースエンジン 8.0.2.2.17 以降で利用可能です。

適用範囲

クラスターのカーネルバージョンは、次の要件を満たす必要があります:

  • MySQL 8.0.1 の場合、リビジョンバージョンが 8.0.1.1.46 以降である必要があります。

  • MySQL 8.0.2 の場合、リビジョンバージョンが 8.0.2.2.26 以降である必要があります。

お使いのクラスターのカーネルバージョンを確認するには、バージョン番号の照会をご参照ください。

パラメーター

パラメーター

スコープ

説明

loose_polar_allow_unique_check_ignore

グローバル

パーティションテーブルのプライマリキーまたは一意キーにパーティションキー列を含める必要があるかどうか (つまり、プライマリキーと一意キーがパーティションキーから分離されているかどうか) を制御します。 有効値:

  • ON:プライマリキーまたは一意キーにパーティションキー列が含まれていないパーティションテーブルを作成できます。

  • OFF (デフォルト):プライマリキーまたは一意キーにパーティションキー列が含まれていないパーティションテーブルを作成できません。

変更は、クラスターを再起動しなくてもすぐに有効になります。

構文

UCI は、テーブル作成時の PolarDB の table_options の属性です。 UNIQUE CHECK IGNORE=1 を指定すると、プライマリキーまたは一意キーがパーティションキー列を含むという制約が緩和されることを示します。これにより、パーティションキーとプライマリキーまたは一意キーとの関係は強制されなくなり、任意の列をパーティションキーとして選択できます。 構文は次のとおりです:

CREATE TABLE [ schema. ]table_name
 table_definition table_options
   PARTITION BY ...
   SUBPARTITION BY ...

この構文では、オプション UNIQUE CHECK IGNORE = { 1| 0 } が table_options に追加されます。 UNIQUE CHECK IGNORE=1 は、プライマリキーと一意キーがすべてのパーティションキー列を含む必要がないことを示し、より柔軟なパーティションキーの選択が可能になります。 ただし、パーティションをまたいだプライマリキーと一意キーの一意性は保証されません。 一意性は各パーティション内でのみ強制され、異なるパーティション間で重複した値が存在する可能性があります。

説明
  • テーブル属性 UNIQUE CHECK IGNORE は、パーティションテーブルでのみ使用できます。 この属性を非パーティションテーブルに追加すると、エラーが発生します。

  • テーブル属性 UNIQUE CHECK IGNORE は読み取り専用です。 テーブルの作成後に UNIQUE CHECK IGNORE の値を変更することはできません。

  • UCI パーティションテーブルは、プライマリキーの一意性を保証しません。 プライマリキーの一意性を強制するには、プライマリキー列に一意の グローバルセカンダリインデックス (GSI) を作成する必要があります。 そうしない場合、パーティションをまたいでプライマリキーの値が重複する可能性があります。 具体的な手順については、例2をご参照ください。

  • UCI パーティションテーブルは、パーティションキー列を含まない一意インデックスの一意性を保証しません。 一意の グローバルセカンダリインデックス (GSI) として作成することを推奨します。

パラメーター

パラメーター

説明

table_name

作成するテーブルの名前です。

例

例1

CREATE TABLE t1(
        a INT PRIMARY KEY,
        b INT UNIQUE,
        c INT
    ) UNIQUE CHECK IGNORE=1
    PARTITION BY RANGE(c) (
            PARTITION p0 VALUES LESS THAN (20) ,
            PARTITION p1 VALUES LESS THAN (40) ,
            PARTITION p2 VALUES LESS THAN (60)
    );

例2

// 一意のグローバルセカンダリインデックスでプライマリキーの一意性を保証します
CREATE TABLE t1(
        a INT PRIMARY KEY,
        b INT UNIQUE,
        c INT,
        UNIQUE KEY i_a_g(a) GLOBAL
    ) UNIQUE CHECK IGNORE=1
    PARTITION BY HASH(c) PARTITIONS 11;