Dav*_*ney 5 mysql sql indexing unique
我有一个表foo,由'created_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,
...
)
Run Code Online (Sandbox Code Playgroud)
如何创建一个bar_id在所有分区中都是唯一的唯一索引?如果我尝试类似的东西:
CREATE UNIQUE INDEX some_index USING BTREE ON foo (bar_id);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
Run Code Online (Sandbox Code Playgroud)
但是,如果我在构建索引时包含分区函数(id,created_at),那么我最终得到的索引不能保证bar_id是唯一的.
UPDATE
我应该提到我已经在桌面上有一个主键:
PRIMARY KEY (`id`,`created_at`)
Run Code Online (Sandbox Code Playgroud)
此外,bar_id可以为NULL.
| 归档时间: |
|
| 查看次数: |
4303 次 |
| 最近记录: |