Я настраиваю базу данных для класса информатики, используя PHPMyAdmin (без SQL или чего-либо еще, просто помещая это прямо в PHPMyAdmin), и в настоящее время я пытаюсь установить внешний ключ в одной из моих таблиц в первичный ключ в другой таблице. Я продолжаю получать эту ошибку: Ошибка создания внешнего ключа для числа графических процессоров (проверьте типы данных). Я понял, что это был TINYINT, а другой - INT, поэтому я изменил его, чтобы они оба были INT. Я также заметил, что один был подписан, а другой нет, поэтому я сделал их обоих без подписи. Имя ограничения внешнего ключа является уникальным (я даже изменил его на всякий случай, если это не так), и я, честно говоря, сейчас в замешательстве, почему он это делает. Я даже зашел так далеко, что удалил одну из таблиц (ту, у которой есть первичный ключ) и полностью переделал ее, просто чтобы иметь ту же проблему. Любая помощь будет очень полезна.
Ниже приведен код SQL для создания таблицы RUNNING_GPUS с первичным ключом numberGPU:
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
Ниже приведен код SQL для создания таблицы RIGS с внешним ключом:
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, но это не работает.