无法在MySQL中创建外键约束。错误号150

无法在MySQL中创建外键约束。错误号150,mysql,sql,foreign-keys,mysql-workbench,Mysql,Sql,Foreign Keys,Mysql Workbench,我正在尝试创建一个数据模型。这相当复杂,但我正在尝试将Splits表链接到Trials表。该模型的屏幕截图如下: 我正在尝试将Splits.protocol+Splits.resultID+Splits.trialNumber作为试用的外键。这三个关系是审判的首要关键。我使用MySQL Workbench执行此操作时,它会抛出一个错误#150。有人知道问题出在哪里吗 以下是SQL语句及其在尝试执行时引发的错误: ERROR 1005: Can't create table '403898_BA

我正在尝试创建一个数据模型。这相当复杂,但我正在尝试将Splits表链接到Trials表。该模型的屏幕截图如下:

我正在尝试将Splits.protocol+Splits.resultID+Splits.trialNumber作为试用的外键。这三个关系是审判的首要关键。我使用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语句:

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
试验说明。还请使用堆栈溢出提供的代码缩进机制。当前代码很难阅读。添加!还有什么我可以提供的吗?啊,订购是个问题。换了它,它立刻就工作了。谢谢我把它作为一个答案贴出来,还是你愿意这样我才能给你信用?