MySQL版本8.0.17
完整的错误如下:
在外键约束'salesItemLine-groupLine‘中引用列'groupLineId’和引用列'groupLineId‘是不兼容的。
我试图通过groupLineId链接两个表,这两个表都不是空的VARCHAR(12)。我不知道为什么我会犯这个错误。我的DB中还有其他几个类似于此的外键关系。
我使用下面的代码来生成这两个表。(注:发票表代码未显示)
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;发布于 2020-03-16 16:26:55
如果有人遇到这种情况,我的问题是我是如何进行更改并使用MySQL工作台的“前工程师”特性的。我最初是以groupLineId ID作为INT类型创建数据库的。然后,我将模型更改为使两个表中的groupLineId变为VARCHAR(12)。然后,当我运行“前向工程师”时,它将首先编写新的groupLine表,并将groupLineId的类型更改为VARCHAR(12),然后用salesItemLine表破坏现有的FROGIEN键,该表尚未更新,并且仍然以groupeLineId类型作为INT。
解决办法是在重新运行向前工程之前,放弃这两个表。(或至少手动删除现有约束)
https://stackoverflow.com/questions/60708866
复制相似问题