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 以降である必要があります。
お使いのクラスターのカーネルバージョンを確認するには、バージョン番号の照会をご参照ください。
パラメーター
パラメーター | スコープ | 説明 |
| グローバル | パーティションテーブルのプライマリキーまたは一意キーにパーティションキー列を含める必要があるかどうか (つまり、プライマリキーと一意キーがパーティションキーから分離されているかどうか) を制御します。 有効値:
変更は、クラスターを再起動しなくてもすぐに有効になります。 |
構文
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;