【问题标题】:Cannot add foreign key constraint on mysql-workbench无法在 mysql-workbench 上添加外键约束
【发布时间】:2015-12-03 07:10:25
【问题描述】:

我正在尝试通过 mysql 工作台创建一个表。我收到以下错误:-

错误1215:无法添加外键约束SQL语句:

CREATE TABLE `propman`.`imageadassociation` (
  `ImageId` INT NOT NULL,
  `AdId` INT NOT NULL,
  INDEX `imageId_adassociation_idx` (`ImageId` ASC),
  INDEX `adId_adassociation_idx` (`AdId` ASC),
  CONSTRAINT `imageId_adassociation`
    FOREIGN KEY (`ImageId`)
    REFERENCES `propman`.`imagelocation` (`ImageId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `adId_adassociation`
    FOREIGN KEY (`AdId`)
    REFERENCES `propman`.`advertisement` (`AdId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

imageLocation表创建状态语句如下:-

CREATE TABLE `imagelocation` (
  `ImageId` int(11) NOT NULL,
  `ImageLocationcol` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

广告表创建语句如下:-

CREATE TABLE `advertisement` (
  `AdId` int(10) NOT NULL AUTO_INCREMENT,
  `PropertyId` int(10) NOT NULL,
  `AdTemplateId` int(10) NOT NULL,
  `ValidFrom` date DEFAULT NULL,
  `ValidTo` date DEFAULT NULL,
  PRIMARY KEY (`AdId`),
  KEY `AdTemplateId` (`AdTemplateId`),
  CONSTRAINT `advertisement_ibfk_2` FOREIGN KEY (`AdTemplateId`) REFERENCES `adtemplate` (`AdTemplateId`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

【问题讨论】:

  • 我们需要查看其他 2 个表
  • 你也有两张桌子吗? sqlfiddle.com/#!9/db77b/1/0。规则是你引用的对象必须存在。
  • 我有两张桌子。我已经编辑了这个问题。给出了两个表的创建语句。
  • @SouravMukherjee 关键是它们的顺序。显示整个脚本你是如何执行它的。
  • @lad2025 我不明白你的意思。

标签: mysql sql mysql-workbench


【解决方案1】:

imageadassociation引用 表。表imagelocationadvertisement引用 表。

引用中的2列需要满足条件:

来自Using Foreign Key Constraints上的Mysql手册页:

外键和引用键中的对应列必须 具有相似的数据类型。整数类型的大小和符号必须是 相同。字符串类型的长度不必相同。为了 非二进制(字符)字符串列、字符集和排序规则 必须相同。

并且他们需要在引用表中有最左边的索引。不满足这些条件。 特别是imageId上没有索引


显示宽度不重要(即:int(11))


【讨论】:

  • 谢谢它解决了我的问题。我将 Image Id 更改为 imageLocation 表中的主键。
猜你喜欢
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2021-11-05
相关资源
最近更新 更多