我正在使用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_db
。RIGS
(错误号:150“外键约束格式不正确”)
ETA:我已经把SQL Fiddle弄乱了一段时间,并且其中包含了所有表。对于此数量的GPU,一切正常。您可以在这里访问小提琴:http://sqlfiddle.com/#!9/ec079e。我只是从上方添加ALTER TABLE并将其添加到底部,并且每次都会收到一条错误消息,说它无法添加外键。 RIGS表是父级,而RUNNING_GPUS是rigID列的子级,但RUNNING_GPUS是父级,而RIGS是numberofGPUs列的子级。我尝试通过先创建RIGS,然后创建RUNNING_GPUS,然后更改RIGS表来进行设置,但这不起作用。
答案 0 :(得分:1)
在RUNNING_GPUS主键中交换订单
更改
主键(rigID
,numberofGPUs
),
到
主键(numberofGPUs
,rigID
)
外键本身必须是某种形式的键,而且显然mysql并不认为键的次要部分是键类型。