删除主表数据时,若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 = '指定数据库名称'