【发布时间】:2015-05-20 04:55:27
【问题描述】:
我们正在使用具有如下架构的表:-
CREATE TABLE `user_subscription` (
`ID` varchar(40) NOT NULL,
`COL1` varchar(40) NOT NULL,
`COL2` varchar(30) NOT NULL,
`COL3` datetime NOT NULL,
`COL4` datetime NOT NULL,
`ARCHIVE` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`)
)
现在我们想在 ARCHIVE 列上进行分区。 ARCHIVE 只能有 2 个值 0 或 1 等 2 个分区。
实际上,在我们的案例中,我们使用分区作为归档过程。要进行分区,我们需要将 ARCHIVE 列作为主键的一部分。但这里的问题是 2 行可以具有相同的 ID 和不同的 ARCHIVE 列值。实际上这不是我们的主要问题,因为 2 行将位于不同的分区中。问题是当我们将其中一个的存档列值更新为另一个以将其中一行移动到存档分区时,它将不允许我们更新给出“重复错误”的条目。
有人可以在这方面提供帮助吗?
【问题讨论】:
-
为什么你的
id会被复制? -
@pala_ 因为 id 和 archive 必须是主键组合才能分区工作,因此 id 可以为不同的存档列值 0 和 1 复制。
-
...您仍然可以在 id 上拥有唯一索引
-
@pala_ 如果我在 id 上添加唯一约束,那么我会收到错误,即分区列也应该是唯一索引的一部分。所以,它也帮不了我……
-
啊。那么您需要使用序列表来生成 ID。您可以使用
before insert触发器自动添加它
标签: mysql partitioning database-partitioning