[Err] 1503 - A PRIMARY KEY must include all columns in the table‘s partitioning function

本文详细解释了在创建带有主键的分区表时,为何必须将分区字段包含在主键中,以避免出现错误。通过具体示例说明,加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直译过来就是错误的解决方案,主键必须包含分区字段,只有在有主键时会抛出这个异常,所以如果有主键则要把分区字段加入主键中

ex:

create table partition_test
(
    id bigint(20) AUTO_INCREMENT,
    create_time datetime ,
    PRIMARY key(id,create_time)
)
PARTITION by RANGE(year(create_time))
(
	PARTITION p0 values LESS THAN (2018)
);

 

### 解决方案 在 MySQL 中,表结构设计时不允许存在多个主键。如果尝试定义多个主键,则会触发错误 `ERROR 1068 (42000): Multiple primary key defined`[^1]。此问题通常发生在创建表的过程中或者通过修改现有表来添加新的主键。 以下是关于如何解决该问题的具体方法: #### 方法一:检查并修正表定义语句 当创建新表时,确保只定义了一个主键字段。例如,在以下 SQL 创建语句中,试图为两个列分别设置为主键将会引发上述错误: ```sql CREATE TABLE example ( id INT PRIMARY KEY, name VARCHAR(50), code INT PRIMARY KEY -- 错误:重复定义主键 ); ``` 要修复这个问题,可以移除多余的主键声明或将它们组合成复合主键形式如下所示: ```sql CREATE TABLE example ( id INT, name VARCHAR(50), code INT, PRIMARY KEY (id, code) -- 使用多列作为单一主键 ); ``` 这样就满足了单个主键的要求,并且能够覆盖到所需的所有唯一约束条件[^3]。 #### 方法二:删除现有的主键后再新增另一个主键 对于已经存在的表格,如果需要更改其主键配置,先得撤销当前设定的主键再重新指定一个新的主键。操作步骤如下: 1. 删除旧有主键: ```sql ALTER TABLE table_name DROP PRIMARY KEY; ``` 2. 添加新的主键: ```sql ALTER TABLE table_name ADD PRIMARY KEY(column_name); ``` 注意这里提到的操作不会影响数据本身存储状态;只是调整逻辑上的索引关系而已[^2]。 另外值得注意的是自 MySQL 版本更新以来某些行为可能有所变化因此遇到难以理解的行为时查阅官方文档是非常必要的[^4]。 ### 结论 综上所述,针对 `MySQL Error 1068: Multiple Primary Key Defined` 的解决方案主要是围绕着避免在同一张表里多次声明主键展开讨论。无论是新建还是改造已有数据库对象都需要遵循这一基本原则从而规避此类异常情况的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值