解决数据库主表删除数据异常问题

删除主表数据时,若id字段被其他表外键关联,则会报错:

Cannot delete or update a parent row: a foreign key constraint fails,

出现这个报错的原因是:

想要删除的数据或表与其他数据或表拥有主外键关系,Mysql规定,为了维护表结构的稳定,禁止执行该操作,即外键约束失败

解决思路:

(1)常规操作:先删除引用外键的所有表数据,再删除主表数据即可

(2)如果是单次数据库操作只想删除主表,不删除关联表,则可以先关闭外键约束

SET foreign_key_checks = 0;  -- 先设置外键约束检查关闭
drop table;  -- 删除表
detele from table where id='xxx' ;  -- 删除数据
SET foreign_key_checks = 1; -- 开启外键约束检查,以保持表结构完整性

(3)如果是java代码层面知道 主表名和主键,则可以先通过sql语句查询出此表所有的外键关联的表名和字段,然后先删除外键表数据再删除主表数据即可

SELECT
    TABLE_NAME AS tableName,    -- 外键引用表名(通常为明细表)
    COLUMN_NAME AS columnName, -- 外键引用表字段(通常为对应主表的id)
    REFERENCED_TABLE_NAME AS refTableName, -- 关联的表名(通常为主表)
    REFERENCED_COLUMN_NAME AS refColumnName -- 关联表字段(通常为主键)
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE 1 = 1
 
-- and REFERENCED_TABLE_NAME != ""
AND REFERENCED_TABLE_NAME = '指定表名称'
AND REFERENCED_TABLE_SCHEMA = '指定数据库名称'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值