【问题标题】:Error creating foreign key on numberofGPUs (check data types) - columns are exact same and I'm still getting this issue在 numberofGPUs 上创建外键时出错(检查数据类型) - 列完全相同,我仍然遇到这个问题
【发布时间】:2019-04-08 22:09:04
【问题描述】:

我正在使用 PHPMyAdmin 为信息学类设置一个数据库(没有 SQL 或任何东西,只是将其直接放入 PHPMyAdmin),目前我正在尝试将我的一个表中的外键设置为主键在另一张桌子上。我不断收到此错误:在 numberofGPUs 上创建外键时出错(检查数据类型)。我意识到一个是 TINYINT,一个是 INT,所以我改变了它,所以它们都是 INT。我还注意到一个已签名而另一个未签名,因此我将它们都设为未签名。外键约束名称是唯一的(我什至更改了它以防万一),老实说,我现在不知道为什么要这样做。我什至已经删除了一张表(带有主键的表)并完全重新制作它,只是为了遇到同样的问题。任何帮助都会非常有帮助。

以下是创建RUNNING_GPUS表的SQL代码,主键为numberofGPUs:

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 - Can't create table aetrigg_db.RIGS (errno: 150 "Foreign key constraint is wrongly forms")

ETA:我一直在搞弄 SQL Fiddle,并且把所有的表都放在里面了。除了这个数量的 GPU 外,一切正常。您可以在此处访问小提琴:http://sqlfiddle.com/#!9/ec079e。我只是从上面添加ALTER TABLE并添加到底部,每次都会出错,说它不能添加外键。 RIGS 表是父表,RUNNING_GPUS 是 rigID 列的子表,但 RUNNING_GPUS 是父表,RIGS 是 numberofGPUs 列的子表。我尝试通过先制作 RIGS,然后是 RUNNING_GPUS,然后更改 RIGS 表来设置它,但这不起作用。

【问题讨论】:

标签: mysql sql phpmyadmin


【解决方案1】:

交换RUNNING_GPUS主键中的顺序

改变
主键 (rigID,numberofGPUs),

主键(numberofGPUsrigID),

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

【讨论】:

猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2020-05-10
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
相关资源
最近更新 更多