在多个GPU(检查数据类型)上创建外键时出错-列完全相同,我仍然遇到此问题

时间:2019-04-08 22:09:04

标签: mysql sql phpmyadmin

我正在使用PHPMyAdmin为信息学类建立数据库(不使用SQL或其他任何方法,只需将其直接放入PHPMyAdmin中),当前我正在尝试将我的一个表中的外键设置为主键在另一个桌子上。我不断收到此错误:在numberofGPU(检查数据类型)上创建外键时出错。我意识到一个是TINYINT,一个是INT,所以我对其进行了更改,因此它们都是INT的。我还注意到一个签名,另一个没有签名,所以我使它们都未签名。外键约束名称是唯一的(我什至更改了它以防万一),老实说,我现在对此感到茫然。我什至已经删除了其中一个表(具有主键的一个表)并完全重新制作它,只是出现了同样的问题。任何帮助都会超级有帮助。

下面是用于创建RUNNING_GPUS表的SQL代码,该表具有GPU的主键号:

CREATE TABLE `RUNNING_GPUS` (
`rigID` varchar(12) NOT NULL,
 `numberofGPUs` int(2) unsigned NOT NULL,
 `runningGPUs` int(2) unsigned NOT NULL,
 PRIMARY KEY (`rigID`,`numberofGPUs`),
 KEY `rigID` (`rigID`),
 CONSTRAINT `rig-fk-for-running` FOREIGN KEY (`rigID`) REFERENCES `RIGS` (`rigID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

以下是用于创建RIGS表的SQL代码,该表具有外键:

 CREATE TABLE `RIGS` (
 `rigID` varchar(12) NOT NULL,
 `rigName` varchar(50) NOT NULL,
 `osVersion` varchar(10) NOT NULL,
 `numberofGPUs` int(2) unsigned NOT NULL,
 `rigLocation` varchar(50) NOT NULL,
 `lastPing` varchar(4) NOT NULL,
 `lastReboot` varchar(4) NOT NULL,
 `latestCrash` varchar(4) NOT NULL,
 `lostRevenuePerHour` decimal(5,4) unsigned DEFAULT NULL,
 `hardwareErrorType` varchar(100) DEFAULT NULL,
 `hardwareErrorMean` decimal(7,3) unsigned DEFAULT NULL,
 PRIMARY KEY (`rigID`),
 CONSTRAINT `error-type-for-rigs` FOREIGN KEY (`hardwareErrorType`) REFERENCES `HARDWARE_ERRORS` (`hardwareErrorType`),
 CONSTRAINT `revenue-for-rigs` FOREIGN KEY (`lostRevenuePerHour`) REFERENCES `LOST_REVENUES` (`lostRevenuePerHour`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

我还通过PHPMyAdmin添加了外键,但是当我尝试执行以下代码时:

ALTER TABLE `RIGS`
ADD CONSTRAINT `test77`
FOREIGN KEY (`numberofGPUs`) REFERENCES `RUNNING_GPUS` (`numberofGPUs`);

它对我说了一个错误:#1005-无法创建表aetrigg_dbRIGS(错误号:150“外键约束格式不正确”)

ETA:我已经把SQL Fiddle弄乱了一段时间,并且其中包含了所有表。对于此数量的GPU,一切正常。您可以在这里访问小提琴:http://sqlfiddle.com/#!9/ec079e。我只是从上方添加ALTER TABLE并将其添加到底部,并且每次都会收到一条错误消息,说它无法添加外键。 RIGS表是父级,而RUNNING_GPUS是rigID列的子级,但RUNNING_GPUS是父级,而RIGS是numberofGPUs列的子级。我尝试通过先创建RIGS,然后创建RUNNING_GPUS,然后更改RIGS表来进行设置,但这不起作用。

1 个答案:

答案 0 :(得分:1)

在RUNNING_GPUS主键中交换订单

更改
 主键(rigIDnumberofGPUs),

 主键(numberofGPUsrigID

外键本身必须是某种形式的键,而且显然mysql并不认为键的次要部分是键类型。