Ho una tabella, foo, che è partizionata da 'created_at' e ha la sua chiave primaria come (id
, created_at
). Cioè .:Come si aggiunge un indice univoco su un campo in un DB MySQL partizionato?
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,
...
)
Come si crea un indice univoco tale che bar_id
è univoco in tutte le partizioni? Se provo qualcosa di simile:
CREATE UNIQUE INDEX some_index USING BTREE ON foo (bar_id);
ricevo l'errore:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
Ma, se comprendo la funzione di partizionamento (id
, created_at
) quando si costruisce l'indice poi io alla fine con un indice che non garantisce che bar_id sia unico.
UPDATE
Avrei detto che ho già una chiave primaria nella tabella:
PRIMARY KEY (`id`,`created_at`)
Inoltre, bar_id può essere NULL.
Ehi, hai trovato un modo? Sto lottando con lo stesso identico problema. Non capisco nemmeno perché la chiave di partizione debba far parte delle chiavi univoche. Non può dare un senso a questo. – varunl
@varunl, ho lo stesso problema anche io. Ho bisogno di usare il campo 'start datatime' come chiave di partizione e lo faccio con' id' archiviato come chiave primaria, ma ho altri campi come UNQUE KEY che devono essere veramente unici. – shgnInc