mysql - 重置数据库无法删除或更新父行 : a foreign key constraint fails

标签 mysql reference foreign-keys

我有一个由包含列表(物种)的表组成的 sql 文件,然后是引用该表的主表(动物),例如:

DROP    TABLE IF EXISTS `tbl_species`; 
CREATE  TABLE `tbl_species` (
    specie                  VARCHAR(10) PRIMARY KEY
) ENGINE=InnoDB             DEFAULT CHARSET=utf8;
INSERT INTO `tbl_species`   VALUES ('dog');
INSERT INTO `tbl_species`   VALUES ('cat');
INSERT INTO `tbl_species`   VALUES ('bird');

DROP    TABLE IF EXISTS `tbl_animal`; 
CREATE TABLE `tbl_animal` (
    id_animal   INTEGER     NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name        VARCHAR(25) NOT NULL DEFAULT "no nombre",
    specie      VARCHAR(10) NOT NULL DEFAULT "dog",
    FOREIGN KEY (specie)        REFERENCES `tbl_species`     (specie),
    CONSTRAINT `uc_Info_Animal` UNIQUE (`id_animal`)           
) ENGINE=InnoDB                 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

这适用于 sqlfiddle没问题,但是当我在服务器上执行 sql 文件时 我收到以下错误:

Cannot delete or update a parent row: a foreign key constraint fails
Statement:
DROP TABLE IF EXISTS `tbl_species`

你能告诉我如何解决这个问题吗,目前我必须删除数据库并重新创建它...所以删除语句导致问题...

最佳答案

您收到 Cannot delete or update 错误的原因是 tbl_animal 表已经存在。需要按照与创建相反的顺序删除表:

DROP    TABLE IF EXISTS `tbl_animal`; 
DROP    TABLE IF EXISTS `tbl_species`; 

CREATE  TABLE `tbl_species` (
    specie                  VARCHAR(10) PRIMARY KEY
) ENGINE=InnoDB             DEFAULT CHARSET=utf8;
INSERT INTO `tbl_species`   VALUES ('dog');
INSERT INTO `tbl_species`   VALUES ('cat');
INSERT INTO `tbl_species`   VALUES ('bird');

CREATE TABLE `tbl_animal` (
    id_animal   INTEGER     NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name        VARCHAR(25) NOT NULL DEFAULT "no nombre",
    specie      VARCHAR(10) NOT NULL DEFAULT "dog",
    FOREIGN KEY (specie)        REFERENCES `tbl_species`     (specie),
    CONSTRAINT `uc_Info_Animal` UNIQUE (`id_animal`)           
) ENGINE=InnoDB                 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

或者,您可以在命令前加上:

SET FOREIGN_KEY_CHECKS=0;

这将禁用当前 session 的外键检查。

要重新启用外键检查,请在之后添加以下命令:

SET FOREIGN_KEY_CHECKS=1;

请参阅 http://sqlfiddle.com/#!2/b6727 中的工作示例

关于mysql - 重置数据库无法删除或更新父行 : a foreign key constraint fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887745/

相关文章:

excel - 我希望一个单元格显示另一个单元格中的一些字符

MySQL:如何从两个字段进行搜索?

c# - 为什么原始对象在复制后更改,而不使用 ref 参数?

javascript - Backbone - 迭代数组属性中的对象

mysql - 如何在 MySQL 中创建关系

mysql - 具有三级外键间接的 SQL select

java - 如何从 Number 值反序列化为 int(错误 - 没有 int/Int 参数构造函数/工厂方法从 Number 值反序列化)

java hibernate envers为审计表设置其他主键

python - 在 django 项目中显示来自 views.py 的表格

mysql - 基于两列的排名