我有一個表foo,它被'created_at'分區,其主鍵爲(id
,created_at
)。即:如何在分區MySQL數據庫的字段中添加唯一索引?
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是唯一的。
UPDATE
我應該提到,我已經對錶的主鍵:
PRIMARY KEY (`id`,`created_at`)
此外,bar_id可以爲NULL。
嘿,你找出一個辦法嗎?我正在努力解決完全相同的問題。我甚至不明白爲什麼分區鍵必須是唯一鍵的一部分。無法理解它。 – varunl 2012-08-28 18:43:52
@varunl,我也有同樣的問題。我需要使用`start datatime`字段作爲分區鍵,並使用'id`字段作爲主鍵,但是我必須將其他字段作爲UNIQUE KEY,這些字段確實需要是唯一的。 – shgnInc 2015-04-23 06:07:01