0

我正在 MySQL Workbench 中创建一个数据库。我在 EER 图中(在 Windows 中)创建了模式,之后转移到了 Linux,并进行了正向工程以获取 SQL 脚本。现在我正在测试数据库,但是我遇到了这个错误,这应该很简单,因为在一对一关系的子项中添加一行。

这些是插入语句:

INSERT INTO `DB_local`.`User` (`idUser`, `name`, `surname`, `gender`, `bornDate`, `address`, `city`, `postcode`, `telephone1`, `telephone2`, `email`) VALUES ('1', '1', '1', '1', '2020/01/01', '1', '1', '1', '1', '1', '1');

运行正常

INSERT INTO `DB_local`.`UserAdditionalDetails` (`idUser`, `cardNumber`, `userHash`, `entryDate`, `member`, `section`) VALUES ('1', '1', '1', '2020/01/01', '1', '1');

这得到了错误:

错误 1452:1452:无法添加或更新子行:外键约束失败(DB_local. UserAdditionalDetails, CONSTRAINT fk_UserAdditionalDetails_User1FOREIGN KEY ( idUser) REFERENCES User( idUser) ON DELETE NO ACTION ON UPDATE NO ACTION)

知道为什么这个简单的 INSERT 不能按预期工作吗?

我搜索了它,我在其他问题中看到人们建议将 AdditionalDetails 数据“移动”到 User 表(出于设计原因,我宁愿避免),或者在插入该表之前禁用参考完整性(它是一个黑客,因为它应该可以正常工作)。

为了添加更多上下文,这是为创建数据库的该部分而生成的代码(数据库要复杂得多):

-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema DB_local
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `DB_local` ;

-- -----------------------------------------------------
-- Schema DB_local
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `DB_local` DEFAULT CHARACTER SET utf8 ;
USE `DB_local` ;

-- -----------------------------------------------------
-- Table `DB_local`.`User`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `DB_local`.`User` ;

CREATE TABLE IF NOT EXISTS `DB_local`.`User` (
  `idUser` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(25) NOT NULL,
  `surname` VARCHAR(75) NULL,
  `gender` VARCHAR(25) NULL,
  `bornDate` DATE NULL,
  `address` VARCHAR(300) NULL,
  `city` VARCHAR(50) NULL,
  `postcode` VARCHAR(5) NULL,
  `telephone1` VARCHAR(10) NULL,
  `telephone2` VARCHAR(10) NULL,
  `email` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idUser`))
ENGINE = MyISAM;


-- -----------------------------------------------------
-- Table `DB_local`.`UserAdditionalDetails`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `DB_local`.`UserAdditionalDetails` ;

CREATE TABLE IF NOT EXISTS `DB_local`.`UserAdditionalDetails` (
  `idUser` INT NOT NULL,
  `cardNumber` VARCHAR(12) NOT NULL,
  `userHash` VARCHAR(45) NOT NULL,
  `entryDate` DATE NOT NULL,
  `member` VARCHAR(45) NULL,
  `section` VARCHAR(45) NULL,
  PRIMARY KEY (`idUser`),
  INDEX `fk_UserAdditionalDetails_User1_idx` (`idUser` ASC),
  CONSTRAINT `fk_UserAdditionalDetails_User1`
    FOREIGN KEY (`idUser`)
    REFERENCES `DB_local`.`User` (`idUser`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


 ... MORE TABLES ...


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
4

1 回答 1

0

最后,问题似乎是我有一些用 MyISAM 创建的表和其他用 InnoDB 创建的表。可能是linux迁移造成的。我在所有表中将引擎更新为 InnoDB,它按预期工作。

于 2020-04-27T14:41:51.973 回答