【问题标题】:MySQL Data Import - Cannot add foreign key constraint error,MySQL 数据导入 - 无法添加外键约束错误,
【发布时间】:2016-08-01 01:01:38
【问题描述】:

我创建了一个模型并转发工程为用于导入的 SQL 文本。当我开始将数据导入到现有连接时,我收到以下错误,

ERROR 1215 (HY000) at line 76: Cannot add foreign key constraint

我已经检查了父母和孩子的数据类型等,但不确定错误来自哪里..

  • 将 MySQLWorkbench 6.3 与 MySQL 5.7 结合使用

第 76 行是以下摘录的开头,

CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Expense` (
  `idExpense` INT NOT NULL,
  `Date` DATETIME NULL,
  `Description` VARCHAR(100) NULL,
  `Amount` DOUBLE NULL,
  `Billable` TINYINT(1) NULL,
  `Job_idJob` INT NOT NULL,
  `Job_idClient` INT NOT NULL,
  `Task_idTask` INT NOT NULL,
  PRIMARY KEY (`idExpense`),
  INDEX `fk_Expense_Job1_idx` (`Job_idJob` ASC, `Job_idClient` ASC),
  INDEX `fk_Expense_Task1_idx` (`Task_idTask` ASC),
  CONSTRAINT `fk_Expense_Job1`
    FOREIGN KEY (`Job_idJob` , `Job_idClient`)
    REFERENCES `CostTrackerDB`.`Job` (`idJob` , `Client_idClient`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Expense_Task1`
    FOREIGN KEY (`Task_idTask`)
    REFERENCES `CostTrackerDB`.`Task` (`idTask`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

整个 SQL 文本,

-- MySQL Script generated by MySQL Workbench
-- 04/11/16 12:31:19
-- Model: New Model    Version: 1.0
-- 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 CostTrackerDB
-- -----------------------------------------------------

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

-- -----------------------------------------------------
-- Table `CostTrackerDB`.`Staff`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Staff` (
  `idStaff` INT NOT NULL,
  `Name` VARCHAR(45) NULL,
  `Role` VARCHAR(45) NULL,
  PRIMARY KEY (`idStaff`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `CostTrackerDB`.`Client`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Client` (
  `idClient` INT NOT NULL,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`idClient`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `CostTrackerDB`.`Job`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Job` (
  `idJob` INT NOT NULL,
  `Number` VARCHAR(45) NULL,
  `Title` VARCHAR(100) NULL,
  `State` VARCHAR(45) NULL,
  `Start` DATETIME NULL,
  `Due` DATETIME NULL,
  `Client_idClient` INT NOT NULL,
  PRIMARY KEY (`idJob`),
  INDEX `fk_Job_Client1_idx` (`Client_idClient` ASC),
  CONSTRAINT `fk_Job_Client1`
    FOREIGN KEY (`Client_idClient`)
    REFERENCES `CostTrackerDB`.`Client` (`idClient`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `CostTrackerDB`.`Task`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Task` (
  `idTask` INT NOT NULL,
  `Title` VARCHAR(100) NULL,
  `idStaff` INT NULL,
  PRIMARY KEY (`idTask`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `CostTrackerDB`.`Expense`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Expense` (
  `idExpense` INT NOT NULL,
  `Date` DATETIME NULL,
  `Description` VARCHAR(100) NULL,
  `Amount` DOUBLE NULL,
  `Billable` TINYINT(1) NULL,
  `Job_idJob` INT NOT NULL,
  `Job_idClient` INT NOT NULL,
  `Task_idTask` INT NOT NULL,
  PRIMARY KEY (`idExpense`),
  INDEX `fk_Expense_Job1_idx` (`Job_idJob` ASC, `Job_idClient` ASC),
  INDEX `fk_Expense_Task1_idx` (`Task_idTask` ASC),
  CONSTRAINT `fk_Expense_Job1`
    FOREIGN KEY (`Job_idJob` , `Job_idClient`)
    REFERENCES `CostTrackerDB`.`Job` (`idJob` , `Client_idClient`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Expense_Task1`
    FOREIGN KEY (`Task_idTask`)
    REFERENCES `CostTrackerDB`.`Task` (`idTask`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `CostTrackerDB`.`StaffAllocation`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`StaffAllocation` (
  `Job_idJob` INT NOT NULL,
  `Staff_idStaff` INT NOT NULL,
  `Task_idTask` INT NOT NULL,
  `Rate` DOUBLE NULL,
  `Role` VARCHAR(45) NULL,
  `Hours` DOUBLE NULL,
  `Week` DATETIME NULL,
  PRIMARY KEY (`Job_idJob`, `Staff_idStaff`, `Task_idTask`),
  INDEX `fk_Job_has_Staff_Staff1_idx` (`Staff_idStaff` ASC),
  INDEX `fk_Job_has_Staff_Job1_idx` (`Job_idJob` ASC),
  INDEX `fk_StaffAllocation_Task1_idx` (`Task_idTask` ASC),
  CONSTRAINT `fk_Job_has_Staff_Job1`
    FOREIGN KEY (`Job_idJob`)
    REFERENCES `CostTrackerDB`.`Job` (`idJob`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Job_has_Staff_Staff1`
    FOREIGN KEY (`Staff_idStaff`)
    REFERENCES `CostTrackerDB`.`Staff` (`idStaff`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_StaffAllocation_Task1`
    FOREIGN KEY (`Task_idTask`)
    REFERENCES `CostTrackerDB`.`Task` (`idTask`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `CostTrackerDB`.`Timesheet`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Timesheet` (
  `Task_idTask` INT NOT NULL,
  `Staff_idStaff` INT NOT NULL,
  `Time` DATETIME NULL,
  `Billable` TINYINT(1) NULL,
  `hours` DATETIME NULL,
  PRIMARY KEY (`Task_idTask`, `Staff_idStaff`),
  INDEX `fk_Task_has_Staff_Staff1_idx` (`Staff_idStaff` ASC),
  INDEX `fk_Task_has_Staff_Task1_idx` (`Task_idTask` ASC),
  CONSTRAINT `fk_Task_has_Staff_Task1`
    FOREIGN KEY (`Task_idTask`)
    REFERENCES `CostTrackerDB`.`Task` (`idTask`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Task_has_Staff_Staff1`
    FOREIGN KEY (`Staff_idStaff`)
    REFERENCES `CostTrackerDB`.`Staff` (`idStaff`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


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

【问题讨论】:

    标签: mysql foreign-keys mysql-workbench


    【解决方案1】:

    试试:

    CREATE TABLE IF NOT EXISTS `CostTrackerDB`.`Expense` (
      `idExpense` INT NOT NULL,
      `Date` DATETIME NULL,
      `Description` VARCHAR(100) NULL,
      `Amount` DOUBLE NULL,
      `Billable` TINYINT(1) NULL,
      `Job_idJob` INT NOT NULL,
      `Job_idClient` INT NOT NULL,
      `Task_idTask` INT NOT NULL,
      PRIMARY KEY (`idExpense`),
      INDEX `fk_Expense_Job1_idx` (`Job_idJob` ASC, `Job_idClient` ASC),
      INDEX `fk_Expense_Task1_idx` (`Task_idTask` ASC),
      /*CONSTRAINT `fk_Expense_Job1`
        FOREIGN KEY (`Job_idJob` , `Job_idClient`)
        REFERENCES `CostTrackerDB`.`Job` (`idJob` , `Client_idClient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,*/
      CONSTRAINT `fk_Expense_Job1`
        FOREIGN KEY (`Job_idJob`)
        REFERENCES `CostTrackerDB`.`Job` (`idJob`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_Expense_Job2`
        FOREIGN KEY (`Job_idClient`)
        REFERENCES `CostTrackerDB`.`Job` (`Client_idClient`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_Expense_Task1`
        FOREIGN KEY (`Task_idTask`)
        REFERENCES `CostTrackerDB`.`Task` (`idTask`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2018-04-28
      相关资源
      最近更新 更多