2012-03-30 88 views
0

我建模使用MySQL工作台CE EER建模我的数据库玛,现在我被困在与MySQL错误号150Mysql的正向工程错误号150

我的SQL代码:

CREATE TABLE `myschema`.`Clients` (
    `phone` VARCHAR(15) NOT NULL , 
    `surname` VARCHAR(30) NOT NULL , 
    `name` VARCHAR(30) NOT NULL , 
    `middleName` VARCHAR(30) NULL , 
    `discountCardNumber` BIGINT NULL , 
    PRIMARY KEY (`phone`) , 
    UNIQUE INDEX `discountCardNumber_UNIQUE` (`discountCardNumber` ASC) , 
    CONSTRAINT `fk_Clients_DiscountCards1` 
    FOREIGN KEY (`discountCardNumber`) 
    REFERENCES `myschema`.`DiscountCards` (`cardNumber`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

CREATE TABLE `myschema`.`OrderStatuses` (
    `statusID` INT NOT NULL AUTO_INCREMENT , 
    `statusTitle` VARCHAR(45) NOT NULL , 
    `statusDescription` VARCHAR(150) NULL , 
    PRIMARY KEY (`statusID`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `myschema`.`WorkstationUsers` (
    `userID` INT NOT NULL AUTO_INCREMENT , 
    `login` VARCHAR(45) NOT NULL , 
    `pass` VARCHAR(45) NOT NULL , 
    `name` VARCHAR(45) NOT NULL , 
    `surname` VARCHAR(45) NOT NULL , 
    `middleName` VARCHAR(45) NULL , 
    PRIMARY KEY (`userID`)) 
ENGINE = InnoDB; 

CREATE TABLE `myschema`.`Orders` (
    `orderID` BIGINT NOT NULL AUTO_INCREMENT , 
    `registerDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
    `clientPhone` VARCHAR(15) NOT NULL , 
    `shipmentAddress` VARCHAR(150) NOT NULL , 
    `orderStatus` INT NOT NULL , 
    `registrator` INT NOT NULL , 
    PRIMARY KEY (`orderID`) , 
    INDEX `fk_Orders_Clients` (`clientPhone` ASC) , 
    INDEX `fk_Orders_OrderStatuses1` (`orderStatus` ASC) , 
    INDEX `fk_Orders_WorkstationUsers1` (`registrator` ASC) , 
    CONSTRAINT `fk_Orders_Clients` 
    FOREIGN KEY (`clientPhone`) 
    REFERENCES `myschema`.`Clients` (`phone`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_Orders_OrderStatuses1` 
    FOREIGN KEY (`orderStatus`) 
    REFERENCES `myschema`.`OrderStatuses` (`statusID`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_Orders_WorkstationUsers1` 
    FOREIGN KEY (`registrator`) 
    REFERENCES `myschema`.`WorkstationUsers` (`userID`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

它在失败最后声明(CREATE TABLE Orders)。

我已经签:refferencing表

  • 类型等于
  • 指标对所有列存在
  • 引擎是InnoDB

感谢您的帮助!祝你有美好的一天!

P.S.抱歉可能有重复。我在代码中找不到任何问题。

+0

表格DiscountCards在哪里? – 2012-03-30 13:43:57

+0

@AshwinA它存在,但一切都OK了。 – 2012-03-30 13:48:50

回答

1

某些字段被定义为NOT NULL,但您将'ON DELETE'操作定义为'SET NULL'。

使这些领域nullabe -

CREATE TABLE `myschema`.`Orders` (
    `orderID` BIGINT NOT NULL AUTO_INCREMENT , 
    `registerDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
    `clientPhone` VARCHAR(15) NULL, -- NOT NULL , 
    `shipmentAddress` VARCHAR(150) NOT NULL , 
    `orderStatus` INT NULL, -- NOT NULL , 
    `registrator` INT NULL, -- NOT NULL , 
    PRIMARY KEY (`orderID`) , 
    INDEX `fk_Orders_Clients` (`clientPhone` ASC) , 
    INDEX `fk_Orders_OrderStatuses1` (`orderStatus` ASC) , 
    INDEX `fk_Orders_WorkstationUsers1` (`registrator` ASC) , 
    CONSTRAINT `fk_Orders_Clients` 
    FOREIGN KEY (`clientPhone`) 
    REFERENCES `myschema`.`Clients` (`phone`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_Orders_OrderStatuses1` 
    FOREIGN KEY (`orderStatus`) 
    REFERENCES `myschema`.`OrderStatuses` (`statusID`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_Orders_WorkstationUsers1` 
    FOREIGN KEY (`registrator`) 
    REFERENCES `myschema`.`WorkstationUsers` (`userID`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 
+0

谢谢!你拯救了我的一天 – 2012-03-30 13:49:07

0

对我来说,这个问题是通过在每个月底增加

默认字符集= UTF8

解决创建表

问候!