0

使用以下脚本,当我尝试创建 NetBankingTransaction 表时,它会失败并显示以下消息:

错误代码:1005。无法创建表“wah_schema.netbankingtransaction”(错误号:150)

数据库脚本:

CREATE  TABLE IF NOT EXISTS `wah_schema`.`Transaction` (
  `idTransaction` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `idOrder` INT UNSIGNED NOT NULL ,
  `type` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idTransaction`, `idOrder`, `type`) )
ENGINE = InnoDB;

CREATE  TABLE IF NOT EXISTS `wah_schema`.`NetBankingTransaction` (
  `idTransaction` INT NOT NULL ,
  `bankCode` VARCHAR(45) NOT NULL ,
  `type` VARCHAR(45) NOT NULL DEFAULT 'NETBANKING' ,
  PRIMARY KEY (`idTransaction`, `type`) ,
  INDEX `fk_NetBankingTransaction_Transaction1` (`idTransaction` ASC, `type` ASC) ,
  CONSTRAINT `fk_NetBankingTransaction_Transaction1`
    FOREIGN KEY (`idTransaction` , `type` )
    REFERENCES `wah_schema`.`Transaction` (`idTransaction` , `type` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

有人可以帮我理解为什么会出现这个错误吗?

4

3 回答 3

0

您需要正确添加该外键约束UNIQUE KEYTransaction (idTransaction, type)

于 2012-04-18T09:37:32.470 回答
0

idTransaction 是每个表中的不同类型。一个是未签名的,另一个是签名的。尝试在第二个表中使 idTransaction 无符号。

于 2012-04-18T09:38:15.597 回答
0

这个对我有用:

/*drop table if exists `Transaction`;*/
CREATE  TABLE IF NOT EXISTS `Transaction` (
  `idTransaction` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `idOrder` INT UNSIGNED NOT NULL ,
  `type` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idTransaction`, `idOrder`, `type`), 
  key idx_idTransaction_type (idTransaction, `type`))
ENGINE = InnoDB;

/*drop table if exists NetBankingTransaction;*/
CREATE  TABLE IF NOT EXISTS `NetBankingTransaction` (
  `idTransaction` INT UNSIGNED NOT NULL ,
  `bankCode` VARCHAR(45) NOT NULL ,
  `type` VARCHAR(45) NOT NULL DEFAULT 'NETBANKING' ,
  PRIMARY KEY (`idTransaction`, `type`)
 , CONSTRAINT `fk_NetBankingTransaction_Transaction1`
    FOREIGN KEY (`idTransaction` , `type` )
    REFERENCES `Transaction` (`idTransaction` , `type` )
    ON DELETE CASCADE
    ON UPDATE CASCADE
    )
ENGINE = InnoDB;

NetBankingTransaction 表中的 idTransaction 必须是无符号的。并且您需要在表中的 (idTransaction, type)上建立索引Transaction。您的主键不涵盖 FK 要求,因为它超过三列。

PS:您在 NetBankingTransaction 表中不需要这个

指数fk_NetBankingTransaction_Transaction1idTransactionASC,typeASC)

于 2012-04-18T10:35:13.877 回答