首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL外键约束不兼容

问MySQL外键约束不兼容
EN

Stack Overflow用户
提问于 2020-03-16 15:34:31
回答 1查看 6.4K关注 0票数 3

MySQL版本8.0.17

完整的错误如下:

在外键约束'salesItemLine-groupLine‘中引用列'groupLineId’和引用列'groupLineId‘是不兼容的。

我试图通过groupLineId链接两个表,这两个表都不是空的VARCHAR(12)。我不知道为什么我会犯这个错误。我的DB中还有其他几个类似于此的外键关系。

我使用下面的代码来生成这两个表。(注:发票表代码未显示)

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `reports`.`groupLine` (
  `groupLineId` VARCHAR(12) NOT NULL,
  `lineNum` INT NOT NULL,
  `invoiceId` VARCHAR(12) NOT NULL,
  PRIMARY KEY (`groupLineId`, `lineNum`, `invoiceId`),
  INDEX `groupLine-invoice_idx` (`invoiceId` ASC) VISIBLE,
  CONSTRAINT `groupLine-invoice`
    FOREIGN KEY (`invoiceId`)
    REFERENCES `reports`.`invoice` (`invoiceId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


CREATE TABLE IF NOT EXISTS `reports`.`salesItemLine` (
  `groupLineId` VARCHAR(12) NOT NULL,
  `lineNum` INT NOT NULL,
  `description` VARCHAR(256) NULL,
  `amount` DECIMAL NULL,
  `detailType` VARCHAR(45) NULL,
  PRIMARY KEY (`groupLineId`, `lineNum`),
  INDEX `salesItemLine-groupLine_idx` (`groupLineId` ASC) VISIBLE,
  CONSTRAINT `salesItemLine-groupLine`
    FOREIGN KEY (`groupLineId`)
    REFERENCES `reports`.`groupLine` (`groupLineId`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;
EN

回答 1

Stack Overflow用户

发布于 2020-03-16 16:26:55

如果有人遇到这种情况,我的问题是我是如何进行更改并使用MySQL工作台的“前工程师”特性的。我最初是以groupLineId ID作为INT类型创建数据库的。然后,我将模型更改为使两个表中的groupLineId变为VARCHAR(12)。然后,当我运行“前向工程师”时,它将首先编写新的groupLine表,并将groupLineId的类型更改为VARCHAR(12),然后用salesItemLine表破坏现有的FROGIEN键,该表尚未更新,并且仍然以groupeLineId类型作为INT。

解决办法是在重新运行向前工程之前,放弃这两个表。(或至少手动删除现有约束)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60708866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档