UPDATE: Darn - не знаете ли вы, что в ту минуту, когда я отправил сообщение, я получил ага! Основная таблица должна быть первой в создании.Добавление внешних ключей в MySQL - errno 150 - using mysqldump
ОБНОВЛЕНИЕ 2: Для всех, кто был следующим, проблема заключалась в моей команде mysqldump, содержащей параметр --compact. Это устранило функцию mysqldump, включающую FOREIGN_KEY_CHECKS = 0; в верхней части файла дампа. Теперь с компактным удалением проблема полностью решена. Не нужно вручную вставлять это в мой файл дампа.
Могу ли я указать порядок таблиц при выполнении mysqldump?
Я загружаю базу данных localhost MySQL на свой общий сервер. Я получаю следующую ошибку, пытающуюся воссоздать таблицу с внешним ключом. "# 1005 - Невозможно создать таблицу 'username_test.gemdetail' (errno: 150). Ниже приведена инструкция sql. Когда предложение Constraint удаляется, таблицы импортируются просто штрафом)
Из базы данных MySQL - FOREIGN KEY Constraints Документация: Если вы заново создаете таблицу, которая была удалена, она должна иметь определение, соответствующее ограничениям внешнего ключа ссылаясь на него. Он должен иметь правильные имена и типы столбцов, и он должен иметь индексы на ссылочных ключах, как указано ранее. Если они не выполняются, MySQL возвращает номер ошибки 1005 и ссылается на ошибку 150 в сообщении об ошибке.
Я проверил для следующих условий (поправьте меня, пожалуйста, если я пропустил что-то):
1) Эти две таблицы должны быть ENGINE = InnoDB. - ДА 2) Две таблицы должны иметь одну и ту же кодировку. - ДА 3) Столбец PK в родительской таблице и столбец FK должны быть одного и того же типа данных. - ДА 4) Столбец PK в родительской таблице и столбец FK, если они имеют тип сортировки определений, должны иметь один и тот же тип сортировки; - НЕ ОПРЕДЕЛЕНА 5) Если в таблице внешнего ключа есть данные, значение (-ы) столбца FK должно соответствовать значениям в столбцах PK родительской таблицы. - НЕТ ДАННЫХ 6) И детская таблица не может быть временной таблицей. - N/A
Я также попытался импортировать в новую пустую базу данных. Есть идеи? Заранее спасибо за вашу помощь.
Соответствующая часть кода SQL, который генерирует MySQLDump (я удалил другие столбцы & ключи ради читаемости, но это урезанный код дает тот же результат):
DROP TABLE IF EXISTS `gemdetail`;
CREATE TABLE `gemdetail` (
`gemdetailid` int(10) NOT NULL AUTO_INCREMENT,
`gemid` int(10) NOT NULL,
PRIMARY KEY (`gemdetailid`),
KEY `gemid` (`gemid`),
CONSTRAINT `gemdetail_ibfk_1` FOREIGN KEY (`gemid`) REFERENCES `gems` (`gemid`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=875 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `gems`;
CREATE TABLE `gems` (
`gemid` int(10) NOT NULL AUTO_INCREMENT,
`userid` int(10) NOT NULL,
PRIMARY KEY (`gemid`),
KEY `userid` (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=528 DEFAULT CHARSET=utf8;
Наконец информация о версии базы данных:
Сервер: Localhost через сокет UNIX Программное обеспечение: MySQL Версия программного обеспечения: 5.5.32-log - Сервер сообщества MySQL (GPL) (BetterLinux 01 Sep 5 2013 23:04:40) Версия протокола: 10
Да, мы иногда не знаем, что такое настоящий вопрос. Что касается неясности, то @Filipe Silva смог дать ответ, не создавая нового вопроса. Как и в других сообщениях, каждый, кто ищет эту проблему, часто объединяет эти проблемы. – mseifert