Tengo una tabla, foo, que está particionada por 'created_at' y tiene su clave principal como (id
, created_at
). Es decir .:¿Cómo agrego un índice único en un campo en una base de datos MySQL particionada?
CREATE TABLE `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`bar_id` int(11) DEFAULT NULL,
...
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (TO_DAYS(created_at))
(PARTITION p0 VALUES LESS THAN (733712) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (733773) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (733832) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (733893) ENGINE = InnoDB,
...
)
¿Cómo se crea un índice único de tal manera que bar_id
es único entre todas las particiones? Si intento algo como:
CREATE UNIQUE INDEX some_index USING BTREE ON foo (bar_id);
recibo el error:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
Pero, si incluyo la función de partición (id
, created_at
) cuando se construye el índice y luego termino con un índice que no garantiza que bar_id sea único.
ACTUALIZACIÓN
debería haber mencionado que ya tengo una clave principal en la tabla:
PRIMARY KEY (`id`,`created_at`)
Además, bar_id puede ser NULL.
Oye, ¿has encontrado una manera? Estoy luchando con el mismo problema. Ni siquiera entiendo por qué la clave de partición debe ser parte de las claves únicas. No puedo entenderlo. – varunl
@varunl, tengo el mismo problema también. Necesito usar el campo 'start datatime' como clave de partición y lo hago con el' id' archivado como clave principal, pero tengo otros campos como UNIQUE KEY que realmente deben ser únicos. – shgnInc