2016-06-15 65 views
0

当MySQL工作台正向工程我收到以下错误:MySQL不能添加外键约束 - MySQL工作台

Executing SQL script in server 
ERROR: Error 1215: Cannot add foreign key constraint 
SQL Code: 
    -- ----------------------------------------------------- 
    -- Table `sdosburn_guile`.`Employee` 
    -- ----------------------------------------------------- 
    CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Employee` (
     `EmployeeID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
     `IsManager` TINYINT(1) NOT NULL, 
     `PasswordHash` BLOB(256) NOT NULL, 
     `NameLast` VARCHAR(25) NOT NULL, 
     `NameFirst` VARCHAR(25) NOT NULL, 
     `DateofBirth` DATE NOT NULL, 
     `EmailAddress` VARCHAR(50) NOT NULL, 
     `PhoneNumber` VARCHAR(13) NOT NULL, 
     `Gender` TINYINT(1) NULL, 
     `HireDate` DATE NULL, 
     `_WarehouseID` INT UNSIGNED NOT NULL, 
     PRIMARY KEY (`EmployeeID`), 
     INDEX `fk_Employee_Warehouse1_idx` (`_WarehouseID` ASC), 
     CONSTRAINT `fk_Employee_Warehouse1` 
     FOREIGN KEY (`_WarehouseID`) 
     REFERENCES `sdosburn_guile`.`Warehouse` (`WarehouseID`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION) 
    ENGINE = InnoDB 

SQL script execution finished: statements: 10 succeeded, 1 failed 

Fetching back view definitions in final form. 
Nothing to fetch 

附件是我的数据库信息。我已经检查过数据类型,大小以及我在网上查到的所有内容,请帮助!!!!!

-- MySQL Workbench Forward Engineering 

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE,   SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

-- ----------------------------------------------------- 
-- Schema sdosburn_guile 
-- ----------------------------------------------------- 

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

- 表sdosburn_guileCustomer


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Customer` (
`CustomerID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`PasswordHash` BLOB(256) NOT NULL, 
`NameLast` VARCHAR(25) NULL, 
`NameFirst` VARCHAR(25) NULL, 
`DateofBirth` DATE NULL, 
`EmailAddress` VARCHAR(50) NOT NULL, 
`PhoneNumber` VARCHAR(13) NULL, 
PRIMARY KEY (`CustomerID`)) 
ENGINE = InnoDB; 

- 表sdosburn_guileBook


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Book` (
`ItemID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`Price` DOUBLE NOT NULL, 
`Title` VARCHAR(50) NOT NULL, 
`Author` VARCHAR(50) NOT NULL, 
`Genre` VARCHAR(20) NULL, 
`ReleaseDate` VARCHAR(10) NULL, 
`Publisher` VARCHAR(50) NULL, 
PRIMARY KEY (`ItemID`)) 
ENGINE = InnoDB; 

- 表sdosburn_guileMusic


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Music` (
`ItemID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`Price` DOUBLE NOT NULL, 
`Title` VARCHAR(50) NOT NULL, 
`Artist` VARCHAR(50) NOT NULL, 
`Genre` VARCHAR(20) NULL, 
`ReleaseDate` VARCHAR(10) NULL, 
`Record Company` VARCHAR(50) NULL, 
PRIMARY KEY (`ItemID`)) 
ENGINE = InnoDB; 

- 表sdosburn_guileMovie


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Movie` (
`ItemID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`Price` DOUBLE NOT NULL, 
`Title` VARCHAR(50) NOT NULL, 
`Genre` VARCHAR(20) NULL, 
`ReleaseDate` VARCHAR(10) NULL, 
`Actor_1` VARCHAR(50) NULL, 
`Actor_2` VARCHAR(50) NULL, 
`Actor_3` VARCHAR(50) NULL, 
`Director` VARCHAR(50) NULL, 
`Production Company` VARCHAR(50) NULL, 
PRIMARY KEY (`ItemID`)) 
ENGINE = InnoDB; 

- 表sdosburn_guileWarehouse


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Warehouse` (
`WarehouseID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`PhoneNumber` VARCHAR(13) NOT NULL, 
`_ManageID` INT UNSIGNED NOT NULL, 
PRIMARY KEY (`WarehouseID`), 
INDEX `fk_Warehouse_Employee1_idx` (`_ManageID` ASC), 
CONSTRAINT `fk_Warehouse_Employee1` 
FOREIGN KEY (`_ManageID`) 
REFERENCES `sdosburn_guile`.`Employee` (`EmployeeID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- 表sdosburn_guileEmployee


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Employee` (
`EmployeeID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`IsManager` TINYINT(1) NOT NULL, 
`PasswordHash` BLOB(256) NOT NULL, 
`NameLast` VARCHAR(25) NOT NULL, 
`NameFirst` VARCHAR(25) NOT NULL, 
`DateofBirth` DATE NOT NULL, 
`EmailAddress` VARCHAR(50) NOT NULL, 
`PhoneNumber` VARCHAR(13) NOT NULL, 
`Gender` TINYINT(1) NULL, 
`HireDate` DATE NULL, 
`_WarehouseID` INT UNSIGNED NOT NULL, 
PRIMARY KEY (`EmployeeID`), 
INDEX `fk_Employee_Warehouse1_idx` (`_WarehouseID` ASC), 
CONSTRAINT `fk_Employee_Warehouse1` 
FOREIGN KEY (`_WarehouseID`) 
REFERENCES `sdosburn_guile`.`Warehouse` (`WarehouseID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- 表sdosburn_guileAddress


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Address` (
`AddressID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`Number` VARCHAR(10) NOT NULL, 
`Street` VARCHAR(35) NOT NULL, 
`State` VARCHAR(2) NOT NULL, 
`Secondary` VARCHAR(20) NULL, 
`LocalCustomerID` INT NULL, 
`LocalEmployeeID` INT NULL, 
`LocalWarehouseID` INT NULL, 
`Addresscol` VARCHAR(45) NULL, 
PRIMARY KEY (`AddressID`), 
INDEX `fk_Address_Customer_idx` (`LocalCustomerID` ASC), 
INDEX `fk_Address_Employee1_idx` (`LocalEmployeeID` ASC), 
INDEX `fk_Address_Warehouse1_idx` (`LocalWarehouseID` ASC), 
UNIQUE INDEX `LocalCustomerID_UNIQUE` (`LocalCustomerID` ASC), 
UNIQUE INDEX `LocalEmployeeID_UNIQUE` (`LocalEmployeeID` ASC), 
UNIQUE INDEX `Addresscol_UNIQUE` (`Addresscol` ASC), 
CONSTRAINT `fk_Address_Customer` 
FOREIGN KEY (`LocalCustomerID`) 
REFERENCES `sdosburn_guile`.`Customer` (`CustomerID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `fk_Address_Employee1` 
FOREIGN KEY (`LocalEmployeeID`) 
REFERENCES `sdosburn_guile`.`Employee` (`EmployeeID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `fk_Address_Warehouse1` 
FOREIGN KEY (`LocalWarehouseID`) 
REFERENCES `sdosburn_guile`.`Warehouse` (`WarehouseID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- 表sdosburn_guileBilling


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`Billing` (
`BillingID` INT NOT NULL AUTO_INCREMENT COMMENT 'Remove datatype and have key be the payment name?', 
`_CustomerID` INT NOT NULL, 
`PaymentType` TINYINT NOT NULL DEFAULT 0, 
`PaymentName` VARCHAR(50) NOT NULL COMMENT 'User\'s name for payment method', 
`AccountNumber` VARCHAR(19) NOT NULL COMMENT 'Can be card number or bank account number', 
`Routing Number` VARCHAR(9) NULL, 
`CVV` VARCHAR(3) NULL, 
`_BillingAddressID` INT UNSIGNED NOT NULL, 
PRIMARY KEY (`BillingID`), 
INDEX `fk_Billing_Customer1_idx` (`_CustomerID` ASC), 
UNIQUE INDEX `BillingID_UNIQUE` (`BillingID` ASC), 
INDEX `fk_Billing_Address1_idx` (`_BillingAddressID` ASC), 
CONSTRAINT `fk_Billing_Customer1` 
FOREIGN KEY (`_CustomerID`) 
REFERENCES `sdosburn_guile`.`Customer` (`CustomerID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `fk_Billing_Address1` 
FOREIGN KEY (`_BillingAddressID`) 
REFERENCES `sdosburn_guile`.`Address` (`AddressID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- 表sdosburn_guileShoppingCart


CREATE TABLE IF NOT EXISTS `sdosburn_guile`.`ShoppingCart` (
`CartID` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`_CustomerID` INT NOT NULL, 
INDEX `fk_ShoppingCart_Customer1_idx` (`_CustomerID` ASC), 
PRIMARY KEY (`CartID`), 
CONSTRAINT `fk_ShoppingCart_Customer1` 
FOREIGN KEY (`_CustomerID`) 
REFERENCES `sdosburn_guile`.`Customer` (`CustomerID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

.... 

SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 
+1

一个提示是创建那些独立和父母像第一,然后孩子。这不像你缩小了很多。顺序是非常重要的。先做父母。 – Drew

回答

0

你的仓库中的表的外键_ManageID不是另一个表的主键,这就是为什么你正在运行到一个错误。一旦你解决了这个问题,你应该没问题,但我没有验证它。

0

对于那些有这个问题,但一切看起来都很好。对我有用的是放下所有表格并再次运行正向工程脚本。