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的报错。