MySQL主键仅校验MAC前6字符引发重复错误,如何调整?
解决MySQL主键仅校验MAC前6字符的问题
问题场景
现有表BLE_PINS,包含TN、MAC、PIN和Date列。执行插入语句:
INSERT INTO `BLE_PINS` (`MAC`, `PIN`) VALUES ('SEEP413E68','99933');
触发错误:
#1062 - Duplicate entry 'SEEP41' for key 'PRIMARY'
查看表定义发现,主键设置为仅校验MAC字段的前6个字符:
CREATE TABLE BLE_PINS ( TN varchar(16) DEFAULT NULL, MAC varchar(100) NOT NULL, PIN varchar(6) NOT NULL, Date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (MAC(6)) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
修改步骤
要让主键校验完整的MAC值,需调整表的主键约束:
- 删除原有主键约束
ALTER TABLE BLE_PINS DROP PRIMARY KEY;
- 添加基于完整MAC字段的主键约束
ALTER TABLE BLE_PINS ADD PRIMARY KEY (MAC);
注意事项
执行上述操作前,必须确保表中不存在完整MAC值重复的记录。如果有重复数据,需先清理(比如删除重复行、合并重复数据),否则添加新主键时会触发重复键错误。
内容的提问来源于stack exchange,提问作者tbickford
相关产品推荐
相关产品推荐

