我正在使用PHPMyAdmin为一个信息学类设置一个数据库(没有SQL之类的东西,只是将它直接放入PHPMyAdmin中),目前我正在尝试将我的一个表中的外键设置为另一个表中的主键。我一直收到这个错误:在多个key上创建外键时出错(检查数据类型)。我意识到一个是TINYINT,一个是INT,所以我改变了它,使它们都是INT的。我还注意到一个是有符号的,另一个没有,所以我把它们都设为无符号的。外键约束名称是唯一的(我甚至更改了它,以防它不是),老实说,我现在对它为什么要这样做感到困惑。我甚至删除了其中一个表(具有主键的那个表),并完全重新创建它,只是为了解决同样的问题。任何帮助都是非常有帮助的。
下面是用于创建RUNNING_GPUS表的SQL代码,该表具有主键numberofGPUs key:
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文件系统了,所有的表都在里面了。除了这个数量的for之外,所有的东西都能正常工作。你可以访问这里的小提琴:http://sqlfiddle.com/#!9/ec079e。我只是从上面添加ALTER TABLE并将其添加到底部,但每次都会得到一个错误,说明它不能添加外键。RIGS表是父级,RUNNING_GPUS是rigID列的子级,但是RUNNING_GPUS是父级,而RIGS是column _ is列的子级。我试着先制作钻机,然后是RUNNING_GPUS,然后修改钻机工作台,但这不起作用。
发布于 2019-04-09 03:00:22
交换RUNNING_GPUS主键中的顺序
变化
主键(rigID
,numberofGPUs
),
至
主键(numberofGPUs
,rigID
),
外键本身必须是某种类型的键,显然mysql不认为键的次要部分是键类型。
https://stackoverflow.com/questions/55582453
复制相似问题