【发布时间】: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