MySQL当中的修改外键关联主键字段属性

这个报错是因为 factory_goods (记得换成自己的表名称)表的 goods_iduser_app_order 表作为外键引用了,MySQL 不允许直接修改被外键关联的主键字段属性,需要先临时关闭外键约束,修改完成后再恢复。

1.完整的修改步骤(安全且可执行)

步骤 1:临时关闭外键约束

先登录 MySQL,执行以下命令关闭外键检查(仅当前会话有效,重启后自动恢复,不用担心影响其他业务):

sql

复制代码
SET FOREIGN_KEY_CHECKS = 0;
步骤 2:修改 goods_id 为自增

现在执行之前的修改语句,就能成功了:

sql

复制代码
ALTER TABLE factory_goods MODIFY COLUMN goods_id INT(11) NOT NULL AUTO_INCREMENT;
步骤 3:恢复外键约束

修改完成后,一定要恢复外键检查,保证数据完整性:

sql

复制代码
SET FOREIGN_KEY_CHECKS = 1;
步骤 4:验证修改结果

执行以下命令查看表结构,确认 goods_id 已经带有 auto_increment

sql

复制代码
DESC factory_goods;

如果输出中 goods_id 那一行的 Extra 列显示 auto_increment,就说明修改成功了。

2.关键说明

  • SET FOREIGN_KEY_CHECKS = 0 只是临时禁用外键检查,不会删除外键关系,只是允许你修改被引用的主键字段,修改完成后恢复即可,对现有数据和外键关联没有破坏。
  • 执行这些操作前,建议先备份数据库(比如 mysqldump -u 用户名 -p xingrong_db > backup.sql),防止误操作(虽然这个操作本身很安全)。
  • 修改完成后,记得把 Django 模型里的 goods_id = models.IntegerField(primary_key=True) 改成 goods_id = models.AutoField(primary_key=True),重启 Django 项目,新增数据时就会自动生成 goods_id 了。

3.总结

  1. 报错原因:goods_id 作为外键被其他表引用,无法直接修改自增属性。
  2. 解决核心:临时关闭外键约束 → 修改字段 → 恢复约束。
  3. 后续操作:同步修改 Django 模型的字段类型为 AutoField,解决 goods_id 为空的报错。

执行完这些步骤后,再在 Django 中新增商品数据,就不会再出现 Column 'goods_id' cannot be null 的错误了。

相关推荐
01传说21 分钟前
redis开机自启脚本
数据库·redis·缓存
这个DBA有点耶28 分钟前
数据库运维的“自动驾驶”:KES-Operator如何把DBA经验编码为软件
数据库·dba·自动化运维
动力 continue1 小时前
MySQL 基础篇 · SELECT 查询大
数据库·sql·mysql·select
程序员-Benothing1 小时前
MySQL 索引下推是什么?——深入理解 ICP 原理与实践
android·数据库·mysql
这个DBA有点耶1 小时前
MySQL主从延迟的“最后一公里”:如何把延迟压到极限
数据库·程序员·架构
DianSan_ERP2 小时前
WMS接入电商平台自动化履约实战:一张订单从平台到出库的接口时序设计
java·前端·网络·数据库·安全·架构·自动化
智购科技自动售货机工厂2 小时前
2026自动售货机语音支付模块集成:从声纹识别到支付闭环的工程实践~YH
大数据·服务器·网络·数据库·人工智能
做一个AK梦3 小时前
论基于云原生数据库的企业信息系统架构设计
数据库·云原生
风哥2号3 小时前
PostgreSQL数据库恢复工具FGPDU(FGEDU PostgreSQL DUL)
数据库·postgresql
智购科技智能售货柜3 小时前
2026自动售货机峰值交易流量应对方案:从消息削峰到弹性扩容的工程实践~YH
数据库·人工智能·单片机·嵌入式硬件·yolo