gpt4 book ai didi

sql - 如何在分区的 MySQL 数据库中的字段上添加唯一索引?

转载 作者:可可西里 更新时间:2023-11-01 07:08:31 26 4
gpt4 key购买 nike

我有一个表 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,
...
)

如何创建唯一索引,使 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。

最佳答案

错误信息本身就说明了问题。请阅读手册, http://dev.mysql.com/doc/refman/5.5/en/partitioning-limitations-partitioning-keys-unique-keys.html

“规则是:分区表的分区表达式中使用的所有列必须是表可能具有的每个唯一键的一部分。简单来说,表上的每个唯一键必须使用表分区中的每个列表达。”

关于sql - 如何在分区的 MySQL 数据库中的字段上添加唯一索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com