MySQL插入Department表报1062主键重复错误 外键关联场景问题咨询
报错原因
该1062错误为主键重复冲突,和你配置的外键规则没有关联,问题出在Department表的字段定义与插入逻辑的匹配上:
did是Department表的主键,要求值全局唯一,你在建表时给该字段设置了默认值1- 执行插入语句时你仅指定了给
Dname字段赋值,两条待插入数据都没有显式传入did的值,MySQL会自动给两条数据的did都填充默认值1 - 主键唯一性校验触发冲突,因此抛出重复条目报错
修复方案
可以根据你的业务需求选择以下任意一种方案:
方案1:插入时显式指定主键值
插入语句补全did字段的赋值,保证每条数据的主键唯一即可,示例代码如下:
insert into Department(did, Dname) values (1, 'Marketing'), (2, 'Human Resources');
方案2:给主键添加自增属性
如果不需要手动维护主键值,可以修改did字段为自增类型,后续插入数据时不传did的值,MySQL会自动生成唯一的递增主键:
首先修改表结构:
ALTER TABLE Department MODIFY COLUMN did INTEGER AUTO_INCREMENT;
修改后你原来的插入语句不需要调整就能正常执行,第一条数据的did会自动生成1,第二条自动生成2,不会出现重复冲突。
额外注意
你当前给Employee表的DepartmentID设置的默认值为5,Project表的DepartmentID默认值为9,后续向这两个表插入数据前,需要确保Department表中已经存在did为5、9的记录,否则会触发外键约束报错。
内容的提问来源于stack exchange,提问作者SilentEM
相关产品推荐
相关产品推荐

