【问题标题】:cant add foreign key constraint, error 1215 in mysql workbench.无法在 mysql 工作台中添加外键约束,错误 1215。
【发布时间】:2019-02-18 00:59:29
【问题描述】:

这是我的代码,我无法继续,因为我总是收到外键约束错误。我检查了它们是一致的数据类型。我哪里错了?在需要外键的地方,所有问题仍然存在。我刚刚在这里张贴了两张桌子。

-- -----------------------------------------------------
-- Table `44376936`.`AccountType`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `44376936`.`AccountType` ;

CREATE TABLE IF NOT EXISTS `44376936`.`AccountType` (
  `AccountTypeID` float NOT NULL,
  `AccountTypeName` VARCHAR(45) NULL,
  `AccountTypeDesc` VARCHAR(45) NULL,
  `AccountTypeInterestRate` FLOAT NULL,
  `AccountTypeServiceFee` FLOAT NULL,
  PRIMARY KEY (`AccountTypeID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `44376936`.`Account`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `44376936`.`Account` ;

CREATE TABLE IF NOT EXISTS `44376936`.`Account` (
  `AccountBSB` INT NOT NULL,
  `AccountNumber` INT NOT NULL,
  `AccountCurrentBalance` FLOAT NULL,
  `AccountType_AccountTypeID` Float NOT NULL,
  PRIMARY KEY (`AccountBSB`, `AccountNumber`, `AccountType_AccountTypeID`),
  INDEX `fk_Account_AccountType_idx` (`AccountType_AccountTypeID` ASC),
  CONSTRAINT `fk_Account_AccountType`
    FOREIGN KEY (`AccountType_AccountTypeID`)
    REFERENCES `44376936`.`AccountType` (`AccountTypeID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

【问题讨论】:

  • @MadhurBhaiya 为什么要先插入数据?那不应该是必要的。如果有的话,它更有可能产生问题。此外,谁说还存在任何数据?我很想知道您提出建议的理由。
  • Anim 你能告诉我们错误信息的确切全文吗?
  • @ADyson 建议使用 mysqldump 并重新导入转储
  • 这可能对你有帮助,percona.com/blog/2017/04/06/…
  • @MadhurBhaiya 即使这就是这里发生的事情,它仍然与问题无关。并且在添加约束之前添加数据 是有风险的,以防数据违反约束,并且因此无法添加约束。这不是一个好建议IMO。如果您有推荐这种做法的信誉良好的来源,请链接到它,我总是很高兴得到纠正,但 AFAIK 这不是一个好主意。

标签: mysql database


【解决方案1】:

我可以复制

它来自这条指令:

REFERENCES `44376936`.`AccountType` (`AccountTypeID`)

问题出在数据库名称上,可能是因为它以数字而不是字母开头。

这行得通:

REFERENCES `AccountType` (`AccountTypeID`)

所以去掉数据库名。如果您在没有44376936 数据库的情况下运行它,请在脚本开头执行此指令:

USE `44376936`;

Rextester example

【讨论】:

  • 我仍然遇到同样的错误。例如,此代码甚至没有创建 Branch 表。如果存在则删除表 44376936.Branch ;如果不存在则创建表 44376936.Branch ( BSB VARCHAR(6) NOT NULL, BranchName VARCHAR(45) NULL, BranchAdress VARCHAR(45) NULL, BranchPhone INT NULL, PRIMARY KEY ( BSB)) 引擎 = InnoDB COMMENT = ' ';
  • 我看不出这有什么关系。我已经在 rextester 中复制了您的原始错误,并通过使用上述技巧成功摆脱了它。如果你像我所做的那样去做,它应该会起作用,这就是我能说的。如果你有另一个错误,这无关紧要。
  • 我试过这个并运行它,它显示错误,警告:无法删除或更新父行:外键约束失败
猜你喜欢
  • 2013-06-02
  • 2018-04-28
  • 2013-07-06
相关资源
最近更新 更多