Mysql转发工程师errno 150

时间:2012-03-30 13:23:54

标签: mysql sql mysql-workbench mysql-error-1005

我正在使用MySQL Workbench CE EER建模器对我的数据库shema进行建模,现在我遇到了mysql errno 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)中失败。

我已经检查过了:

  • 引用表的类型等于
  • 所有列的索引都存在
  • 引擎Orders

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

就我而言,通过添加

解决了问题
  

DEFAULT CHARACTER SET = utf8

在每个创建表的末尾

问候!