De_arning 2024-09-26 17:33 采纳率: 53.8%
浏览 4

mysql 为什么主键删除,分区还在?

mysql 为什么主键删除,分区还在?
根据主键的asin 创建了分区, 然后删除了主键,分区没有删除,gpt是这样说的
https://poe.com/s/J3H4HssKOHmvJ0bIfS01

img

img

-- db_junglescout_amazon.tb_sales_estimates_weekly_v2 definition

CREATE TABLE `tb_sales_estimates_weekly_v2` (
  `created_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `marketplace` varchar(5) NOT NULL,
  `root_category_id` bigint NOT NULL,
  `year` int NOT NULL,
  `week` varchar(3) NOT NULL,
  `start_date` date NOT NULL,
  `end_date` date NOT NULL,
  `asin` varchar(40) NOT NULL,
  `is_available` int DEFAULT NULL,
  `category_rank` bigint DEFAULT NULL,
  `subcategory_rank` bigint DEFAULT NULL,
  `brand` varchar(1000) DEFAULT NULL,
  `name` varchar(1000) DEFAULT NULL,
  `image_url` varchar(1000) DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `review_count` bigint DEFAULT NULL,
  `ratings` decimal(3,1) DEFAULT NULL,
  `breadcrumb_path_category_ids` varchar(1000) DEFAULT NULL,
  `ranking_category_ids` varchar(1000) DEFAULT NULL,
  `first_date_available` datetime DEFAULT NULL,
  `revenue` decimal(20,2) DEFAULT NULL,
  `revenue_1p` decimal(20,2) DEFAULT NULL,
  `revenue_3p` decimal(20,2) DEFAULT NULL,
  `sales` decimal(20,2) DEFAULT NULL,
  `sales_1p` decimal(20,2) DEFAULT NULL,
  `sales_3p` decimal(20,2) DEFAULT NULL,
  `seller_ids` varchar(1000) DEFAULT NULL,
  `seller_id_mode` varchar(1000) DEFAULT NULL,
  `seller_types` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY KEY (asin)
PARTITIONS 1024 */;
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-26 17:34
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在MySQL中,当您删除一个包含主键的表的主键时,分区(partitions)可能不会自动被删除。这是因为分区通常是通过主键或其他特定条件创建的。

    要解决这个问题,您可以考虑以下几种方式:

    1. 手动创建新的分区:如果您知道哪些分区应该保留,可以手工创建新的分区。这通常涉及修改ALTER TABLE语句以指定新分区的大小、起始行数等参数。例如,您可以使用以下SQL命令来创建一个新的分区:

      ALTER TABLE tb_sales_estimates_weekly_v2 ADD PARTITION (asin = 'your_asin') VALUES LESS THAN ('your_last_partition_value');
      

      这将为您的ASIN分配一个新的分区,其中your_asin是您的ASIN值,your_last_partition_value是上一次分区结束的位置。

    2. 使用数据库引擎特性:某些数据库引擎,如MyISAM,支持在删除主键的同时保持分区完整性。在这种情况下,分区会自动更新到新的主键范围之外。然而,对于其他类型的数据库引擎,比如InnoDB,这种方法不总是适用。

    3. 确保备份:在进行任何更改之前,务必对数据库执行完整的备份。这样即使出现问题,也可以恢复到之前的版本。

    请注意,在操作过程中可能会遇到一些问题,因为MySQL的分区机制并不是非常灵活且容易调整。因此,建议在实际操作前先进行充分的测试和验证。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日