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;