MySQL 错误代码(无法添加或更新子行..)

标签 mysql database foreign-keys mysql-workbench

这是我的一张 table :

CREATE TABLE IF NOT EXISTS `mydb`.`Branch` (
`branchID` CHAR(5) NOT NULL,
`branchAddress` VARCHAR(40) NULL,
`branchPhoneNo` VARCHAR(20) NULL,
`productCode` CHAR(5) NULL,
PRIMARY KEY (`branchID`))
ENGINE = InnoDB;

这是该表的插入内容:

START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Branch` (`branchID`, `branchAddress`, `branchPhoneNo`, 
`productCode`) VALUES ('BR198', 'Waterford', '051786796', 'P1234');
INSERT INTO `mydb`.`Branch` (`branchID`, `branchAddress`, `branchPhoneNo`, 
`productCode`) VALUES ('BR221', 'Cork', '021475859', 'P5678');
INSERT INTO `mydb`.`Branch` (`branchID`, `branchAddress`, `branchPhoneNo`, 
`productCode`) VALUES ('BR330', 'Waterford', '051846784', 'P1122');
INSERT INTO `mydb`.`Branch` (`branchID`, `branchAddress`, `branchPhoneNo`, 
`productCode`) VALUES ('BR38', 'Dublin', '01784767', 'P3344');
INSERT INTO `mydb`.`Branch` (`branchID`, `branchAddress`, `branchPhoneNo`, 
`productCode`) VALUES ('BR001', 'Longford', '041875589', 'P5566');

COMMIT;

这是我的第二张表:

CREATE TABLE IF NOT EXISTS `mydb`.`Employee` (
`empNo` CHAR(5) NOT NULL,
`name` VARCHAR(25) NULL,
`department` VARCHAR(10) NULL,
`Branch_branchID` CHAR(5) NOT NULL,
`Manager_managerID` CHAR(5) NOT NULL,
PRIMARY KEY (`empNo`),
INDEX `fk_Employee_Branch1_idx` (`Branch_branchID` ASC),
INDEX `fk_Employee_Manager1_idx` (`Manager_managerID` ASC),
CONSTRAINT `fk_Employee_Branch1`
FOREIGN KEY (`Branch_branchID`)
REFERENCES `mydb`.`Branch` (`branchID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Employee_Manager1`
FOREIGN KEY (`Manager_managerID`)
REFERENCES `mydb`.`Manager` (`managerID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

这里还有该表的插入内容:

START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Employee` (`empNo`, `name`, `department`, 
`Branch_branchID`, `Manager_managerID`) VALUES ('EM092', 'Dami Kerry', 
'Garden', 'BR198', 'M3321');
INSERT INTO `mydb`.`Employee` (`empNo`, `name`, `department`, 
`Branch_branchID`, `Manager_managerID`) VALUES ('EM782', 'Donna Kinsella', 
'Living', 'BR221', 'M7789');
INSERT INTO `mydb`.`Employee` (`empNo`, `name`, `department`, 
`Branch_branchID`, `Manager_managerID`) VALUES ('EM109', 'Georgina Hughes', 
'Bathroom', 'BR330', 'M9034');
INSERT INTO `mydb`.`Employee` (`empNo`, `name`, `department`, 
`Branch_branchID`, `Manager_managerID`) VALUES ('EM728', 'Joe Bloggs', 
'Kitchen', 'BR938', 'M2945');
INSERT INTO `mydb`.`Employee` (`empNo`, `name`, `department`, 
`Branch_branchID`, `Manager_managerID`) VALUES ('EM211', 'Michael Carroll', 
'Bedroom', 'BR001', 'M0921');

COMMIT;

这是我不断收到的错误消息:

错误代码:1452。无法添加或更新子行:外键约束失败(mydb.employee,CONSTRAINT fk_Employee_Branch1 FOREIGN KEY (Branch_branchID) 引用 branch (branchID) 删除时不执行任何操作 更新时不执行任何操作

正如您所见,我对 MySql 还很陌生。请您提供任何帮助/建议,我们将不胜感激!

提前致谢!

最佳答案

检查查询。

Cannot add or update a child row: a foreign key constraint fails

当您尝试删除对另一个表有依赖关系的记录,或者当您尝试添加对另一个表不存在依赖关系的记录时,会出现此错误。

我看到插入查询,发现表“Branch”中的 Pk“BR38”不等于您尝试在 Employee 中插入的 Fk“BR938”:

INSERT INTO `mydb`.`Branch` (`branchID`, `branchAddress`, `branchPhoneNo`, 
`productCode`) VALUES ('BR38', 'Dublin', '01784767', 'P3344');

INSERT INTO `mydb`.`Employee` (`empNo`, `name`, `department`, 
`Branch_branchID`, `Manager_managerID`) VALUES ('EM728', 'Joe Bloggs', 
'Kitchen', 'BR938', 'M2945');

更正查询中的 FK,并让我知道它是否有效。

关于MySQL 错误代码(无法添加或更新子行..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075256/

相关文章:

mysql - mysql数据库规范化

database - 如何在sql中选择满足多个条件的行?

mysql - 如何显示SQL查询的访问路径

c# - 删除级联的 Entity Framework

mysql - MYSQL 中的外键是如何工作的?

python - 如何根据 pandas 中的公共(public)键合并两个数据集?

MySQL - 如果字段内有逗号,则 LOAD DATA LOCAL INFILE 不起作用?

python - 如何在没有互联网访问的情况下为 python 安装 MySQL

php - 使用 PDO 省略 bindParam 安全吗?

java - 如何从滚动数据库中获取数据?