在列表列进行表分区时获取错误



我有一个带有下面结构的表:

CREATE TABLE `orders_partition` (
  `Order_Id` bigint(20) NOT NULL,
  `Category_Id` bigint(20) NOT NULL,
  `Order_No` varchar(50) CHARACTER SET latin1 NOT NULL,
  `Student_Id` bigint(20) DEFAULT NULL,
  `Country_Id` bigint(20) NOT NULL,
  `Total_Refers` int(11) NOT NULL,
  `Pages` float(5,1) NOT NULL,
  `Word_count` int(11) NOT NULL,
  `Order_Type_Id` bigint(20) DEFAULT NULL,
  `Reference_Style_Id` int(11) NOT NULL,
  `Payment_Mode_Id` bigint(20) DEFAULT NULL,
  `Payment_Status_Id` bigint(20) DEFAULT NULL,
  `Order_IP` varchar(255) CHARACTER SET latin1 NOT NULL,
  `Order_Amount` decimal(10,2) NOT NULL DEFAULT '0.00',
  `Order_Status_Id` bigint(20) DEFAULT NULL,
  `Panic` tinyint(1) NOT NULL DEFAULT '0',
  `Url_Referal_Detail` text CHARACTER SET latin1 NOT NULL,
  `publish_status` int(11) NOT NULL,
  `L_Q_Reason_Id` varchar(255) CHARACTER SET latin1 DEFAULT 'NULL',
  `Transfer_Status` enum('NT','T','A') CHARACTER SET latin1 NOT NULL DEFAULT 'A' COMMENT 'NT=>not transfer,T=>transfer,A=>allowed to transfer',
  `Visibility` enum('E','D') CHARACTER SET latin1 NOT NULL DEFAULT 'E' COMMENT 'E=enabled, D=disabled',
  `Active_Date` datetime NOT NULL,
  `Active_Status` enum('A','DA') CHARACTER SET latin1 NOT NULL DEFAULT 'A' COMMENT 'A=>Active,DA=>Deactive'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `orders_partition`
  ADD PRIMARY KEY (`Order_Id`),
  ADD UNIQUE KEY `Order_Id` (`Order_Id`),
  ADD KEY `Order_Status_Id` (`Order_Status_Id`),
  ADD KEY `Country_Id` (`Country_Id`)

执行以下分区查询

ALTER TABLE orders_partition
PARTITION BY LIST COLUMNS (Active_Status)
(
   PARTITION p01 VALUES IN ('A'),
PARTITION p02 VALUES IN ('DA')
 )

在错误以下

以下

1659 -field'active_status'是这种类型的分区

不允许类型

我正在我们的MySQL表中实现分区(列表列(,MySQL版本为5.7

不要尝试在标志上分区;不太可能提供任何好处。

mySQL的PARTITIONing有许多限制;您遇到了可以在哪些数据型上进行分区的限制 - 列表不包括ENUM

如果您已经过去了,下一个错误将需要在每个唯一键(包括主密钥(中包含"分区密钥"。

同时,UNIQUE(Order_id)使用PRIMARY KEY(Order_id)冗余。PK是(按MySQL的定义(是一个键且唯一的。

相关内容

  • 没有找到相关文章

最新更新