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

PolarDB:ユニークなチェックの無視

最終更新日:Aug 13, 2024

PolarDB for MySQLは、パーティションテーブルがパーティションキーの一意性チェックを無視できるようにするUNIQUE CHECK IGNORE (UCI) パラメーターをサポートしています。 この機能は、MySQL 8.0.2.2.17以降でサポートされています。

説明
  • この機能はカナリアリリースにあります。 この機能を使用するには、クォータセンターに移動します。 polardb_mysql_uciクォータIDを入力してクォータを見つけます。 [操作] 列の [適用] をクリックします。

  • UCIの詳細については、DingTalkグループ24490017825に参加してください。

構文

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=1で作成されたパーティションテーブルは、プライマリキーの一意性を保証しません。 プライマリキーの一意性を確保するには、プライマリキーフィールドに一意のグローバルセカンダリインデックス (GSI) を作成する必要があります。 そうでない場合、重複する主キーフィールド値が異なるパーティションに存在する可能性があります。 詳細については、「例2」をご参照ください。

  • UNIQUE CHECK IGNORE=1で作成されたパーティションテーブルは、パーティションテーブルのインデックスの一意性を保証しません。 一意のグローバルセカンダリインデックス (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 a unique global secondary index ensures that the primary key is unique.
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;