PolarDB for MySQL admite tablas particionadas cuya clave primaria no incluye las columnas de la clave de partición (UNIQUE CHECK IGNORE, o UCI por sus siglas en inglés). Esta función está disponible en la versión 8.0.2.2.17 y posteriores del motor de base de datos.
Ámbito de aplicación
La versión del kernel de su clúster debe cumplir los siguientes requisitos:
MySQL 8.0.1, con una versión de revisión 8.0.1.1.46 o posterior.
MySQL 8.0.2, con una versión de revisión 8.0.2.2.26 o posterior.
Para comprobar la versión del kernel de su clúster, consulte Query the version number.
Referencia de parámetros
Parámetro | Ámbito | Descripción |
| Global | Controla si la clave primaria o la clave única de una tabla particionada debe contener las columnas de la clave de partición. Es decir, define si la clave primaria y la clave única se desacoplan de la clave de partición. Valores válidos:
Los cambios surten efecto de inmediato, sin necesidad de reiniciar el clúster. |
Sintaxis
UCI es un atributo de PolarDB table_options que se utiliza al crear una tabla. Al especificar UNIQUE CHECK IGNORE=1, la tabla omite las comprobaciones de unicidad en las columnas de la clave de partición. De este modo, ya no se exige la relación entre la clave de partición y la clave primaria o única, por lo que puede elegir cualquier columna como clave de partición. A continuación se muestra la sintaxis:
CREATE TABLE [ schema. ]table_name
table_definition table_options
PARTITION BY ...
SUBPARTITION BY ...
En esta sintaxis se añade la opción UNIQUE CHECK IGNORE = { 1| 0 } a table_options. El valor UNIQUE CHECK IGNORE=1 indica que la clave primaria y la clave única no necesitan contener todas las columnas de la clave de partición, lo que brinda mayor flexibilidad para seleccionar dicha clave. Sin embargo, no se garantiza la unicidad de las claves primarias ni de las claves únicas entre distintas particiones. La unicidad solo se aplica dentro de cada partición, por lo que pueden existir valores duplicados en diferentes particiones.
El atributo de tabla
UNIQUE CHECK IGNOREsolo se puede usar en tablas particionadas. Si lo añade a una tabla no particionada, se generará un error.El atributo de tabla
UNIQUE CHECK IGNOREes de solo lectura. No es posible modificar el valor deUNIQUE CHECK IGNOREdespués de crear la tabla.Una tabla particionada con UCI no garantiza la unicidad de la clave primaria. Para exigirla, cree un Global Secondary Indexes (GSIs) único en las columnas de la clave primaria. De lo contrario, se permitirán valores de clave primaria duplicados entre distintas particiones. Para conocer el procedimiento exacto, consulte Example 2.
Una tabla particionada con UCI tampoco garantiza la unicidad de un índice único que no contenga las columnas de la clave de partición. Se recomienda crearlo como un Global Secondary Indexes (GSIs) único.
Parámetros
|
Parámetro |
Descripción |
|
table_name |
Nombre de la tabla que se va a crear. |
Ejemplos
Ejemplo 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)
);
Ejemplo 2
// A unique global secondary index ensures primary key uniqueness
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;