MySQL Error number: MY-012579; Symbol: ER_IB_MSG_754; SQLSTATE: HY000

文档解释

Error number: MY-012579; Symbol: ER_IB_MSG_754; SQLSTATE: HY000

Message: %s

错误 ER_IB_MSG_754: 不允许使用在非复合主键中非唯一列定义的索引

错误说明

ER_IB_MSG_754错误是MySQL抛出的,消息指出不允许定义在非复合主键中的非唯一索引。 什么是非复合主键?非复合主键是有多个字段组成的主键,每个字段可能有不同的值。非复合主键一般用来标识数据表中的每一行记录,这些字段可能都有索引,但不能有重复的值。

常见案例

医院记录处方表,记录处方的相关信息(病人id,药物序号,每次服药用量等),就可以设置一个复合主键(病人id,药物序号),来保证该表中每行记录的唯一性。

假如用的却是个非复合主键,可能就会出现ER_IB_MSG_754的错误。比如当表中仅使用病人id作为非复合主键时,可能会出现重复的病人id,MySQL引擎会报这种错误,要求非复合主键中不允许用非唯一列定义的索引。

解决方法

1、主键定义

一般来说,用复合主键来替换非复合主键,最好是用unique索引,这样就可以确保表中每行记录的唯一性。

2、部分字段设置unique键

当某些字段不属于主键组成部分,但又有重复数据时,可以对这些字段设置unique键。这可以避免数据重复,避免ER_IB_MSG_754的报错。

3、修改索引字段,加入主键组成部分

如果一个索引的字段已经被定义为unique索引,但它不属于主键组成部分,也可以尝试将其加入到主键组成部分,这样也可以避免ER_IB_MSG_754的报错。

你可能感兴趣的