【发布时间】: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 表来设置它,但这不起作用。
【问题讨论】:
-
您需要为两个表显示
CREATE TABLE语句才能得到正确的答案。 -
你应该edit你的问题并发布实际的
CREATE和/或ALTER声明。 -
您可能会喜欢我贡献的外键清单:stackoverflow.com/a/4673775/20860
-
您可以在此处查看如何生成语句:itsupportguides.com/knowledge-base/tech-tips-tricks/…
-
您是否按此顺序创建此表?你也可以显示确切的错误信息吗?
标签: mysql sql phpmyadmin