【问题标题】:Unable to create foreign key constraint in MySQL. Error number 150无法在 MySQL 中创建外键约束。错误号 150
【发布时间】:2014-03-24 15:08:03
【问题描述】:

我正在尝试创建数据模型。它相当复杂,但我正在尝试将 Splits 表链接到 Trials 表。模型截图如下:

我正在尝试使 Splits.protocol + Splits.resultID + Splits.trialNumber 成为 Trials 的外键。这三个关系是 Trials 的主键。我正在使用 MySQL Workbench 执行此操作,它会引发错误 #150。有谁知道问题出在哪里?

这是 SQL 语句以及它在尝试执行它时抛出的错误:

ERROR 1005: Can't create table '403898_BAMNormalized.#sql-7285_6c29081' (errno: 150)

SQL Statement:

ALTER TABLE `403898_BAMNormalized`.`Splits` 

ADD CONSTRAINT `FK_FromTrial`
    FOREIGN KEY (`protocol` , `resultID` , `trialNumber`)
    REFERENCES `403898_BAMNormalized`.`Trials` (`protocol` , `resultID` , `trialNumber`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION

ERROR: Error when running failback script. Details follow.

ERROR 1050: Table 'Splits' already exists

SQL Statement:

CREATE TABLE `Splits` (
    `protocol` varchar(255) NOT NULL,
    `resultID` int(11) NOT NULL,
    `trialNumber` int(11) NOT NULL,
    `splitNumber` int(11) NOT NULL,
    `splitScore` decimal(10,0) NOT NULL,
    PRIMARY KEY (`protocol`,`resultID`,`trialNumber`,`splitNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

这里是创建表语句:

CREATE TABLE `Trials` (
    `resultID` int(11) NOT NULL,
    `protocol` varchar(255) NOT NULL,
    `trialNumber` int(11) NOT NULL,
    `trialScore` decimal(10,0) NOT NULL,
    `best` char(1) DEFAULT NULL,
    `DQFlag` varchar(45) DEFAULT NULL,
    PRIMARY KEY (`resultID`,`protocol`,`trialNumber`),
    CONSTRAINT `FK_trialID` FOREIGN KEY (`resultID`, `protocol`) REFERENCES `ResultsDetails` (`resultID`, `protocol`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `Splits` (
    `protocol` varchar(255) NOT NULL,
    `resultID` int(11) NOT NULL,
    `trialNumber` int(11) NOT NULL,
    `splitNumber` int(11) NOT NULL,
    `splitScore` decimal(10,0) NOT NULL,
    PRIMARY KEY (`protocol`,`resultID`,`trialNumber`,`splitNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

试验索引表:

【问题讨论】:

  • 能否提供两个表的SQL代码以及失败的FK定义?
  • 添加了一些东西。这有帮助吗?还有什么可以帮助的吗?
  • 请提供create table 试验声明。请同时使用堆栈溢出提供的代码缩进机制。当前的代码很难阅读。
  • 已添加!还有什么我可以提供的吗?
  • 啊,顺序是问题。切换它,它立即工作。谢谢!我应该把它作为答案发布,还是你愿意这样我可以给你信用?

标签: mysql sql foreign-keys mysql-workbench


【解决方案1】:

重新排序索引以表示与外键相同的顺序是解决方案。有关详细信息,请参阅原始帖子所附的 cmets。

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 2021-08-06
    • 1970-01-01
    • 2021-12-24
    • 2014-02-26
    • 1970-01-01
    • 2021-01-05
    • 2016-02-11
    相关资源
    最近更新 更多