为什么我在MYSQL中得到“错误代码1005无法创建表”,而在FK中没有输入错误

lyfkaqu1  于 2023-01-08  发布在  Mysql
关注(0)|答案(3)|浏览(164)

使用以下脚本,当我尝试创建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;

有人能帮助我理解为什么我会得到这个错误吗?

kzmpq1sx

kzmpq1sx1#

这一个适合我:

/*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必须是无符号的。您需要在Transaction表中的(idTransaction,type)上建立索引。您的主键不满足FK要求,因为它超过了三列。
注:在NetBankingTransaction表中不需要此参数
步进x1米2英寸(x1米3英寸自动校准,x1米4英寸自动校准)

oknwwptz

oknwwptz2#

您需要Transaction (idTransaction, type)中的UNIQUE KEY才能正确添加外键约束。

uwopmtnx

uwopmtnx3#

idTransaction在每个表中是不同的类型。一个是unsigned,另一个是signed。尝试在第二个表中使idTransaction成为unsigned。

相关问题