gpt4 book ai didi

MySQL |错误 - UNIQUE INDEX 必须包含表分区函数中的所有列

转载 作者:行者123 更新时间:2023-11-29 16:11:06 25 4
gpt4 key购买 nike

我在 MySQL 中的表上遇到分区问题。我想根据季度对表提醒进行分区,因为我认为我可以删除稍后过期的提醒列表。

也许,我应该在主键唯一键中添加字段来分区工作。请帮我解决这个问题。

CREATE TABLE `reminders`
(
`id` bigint(20) NOT NULL,
`mer_reminder_id` varchar(255) UNIQUE NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
`type` varchar(32) DEFAULT NULL,
`priority` int(11) DEFAULT NULL,
`due` timestamp NULL DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`template` varchar(32) DEFAULT NULL,
`action_id` bigint(20) NOT NULL,
`merchant_id` bigint(20) NOT NULL,
`expired` bool NULL DEFAULT NULL,
PRIMARY KEY (`id`, `created_at`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
PARTITION BY RANGE ( UNIX_TIMESTAMP(created_at) ) (
PARTITION zpm_reminder_reminders_q1_2019 VALUES LESS THAN ( UNIX_TIMESTAMP('2019-04-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q2_2019 VALUES LESS THAN ( UNIX_TIMESTAMP('2019-07-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q3_2019 VALUES LESS THAN ( UNIX_TIMESTAMP('2019-10-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q4_2019 VALUES LESS THAN ( UNIX_TIMESTAMP('2020-01-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q1_2020 VALUES LESS THAN ( UNIX_TIMESTAMP('2020-04-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q2_2020 VALUES LESS THAN ( UNIX_TIMESTAMP('2020-07-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q3_2020 VALUES LESS THAN ( UNIX_TIMESTAMP('2020-10-01 00:00:00') ),
PARTITION zpm_reminder_reminders_q4_2020 VALUES LESS THAN ( UNIX_TIMESTAMP('2021-01-01 00:00:00') )
);

问题:#1503 - UNIQUE INDEX 必须包含表分区函数中的所有列

最佳答案

错误消息非常不言自明:如果您的表已分区并且具有唯一键,则唯一键中使用的每一列也必须用作分区的一部分。您使用 UNIX_TIMESTAMP(created_at) 进行分区,但 mer_reminder_id 上有唯一键,因此此配置无效。

我的建议:不要为此使用 MySQL 分区。它们的局限性极大,而且常常存在缺陷。如果您需要丢弃此表中的旧行,请使用带条件的 DELETE - 除非您的表非常,否则您将花费​​比维护分区更多的时间您将节省更快的删除操作。

(与此无关,我在您的表中发现了潜在的设计问题 - 表中的主键可能应该是 id,而不是 (id,created_at)。时间戳几乎从不属于主键。)

关于MySQL |错误 - UNIQUE INDEX 必须包含表分区函数中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253127/

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