У меня есть таблица, foo, которая разделена на «create_at» и имеет первичный ключ как (id
, created_at
).Т.е.:
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,
...
)
Как мне создать уникальный индекс, такой, чтобы bar_id
был уникальным для всех разделов?Если я пытаюсь что-то вроде:
CREATE UNIQUE INDEX some_index USING BTREE ON foo (bar_id);
, я получаю сообщение об ошибке:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
Но если я включаю функцию разделения (id
, created_at
) при построении индексазатем я получаю индекс, который не гарантирует уникальность bar_id.
ОБНОВЛЕНИЕ
Я должен был упомянуть, что у меня уже есть первичный ключ в таблице:
PRIMARY KEY (`id`,`created_at`)
Кроме того, bar_id может быть NULL.