MySQL: невозможно создать таблицу (номер ошибки: 150) - PullRequest
149 голосов
/ 31 октября 2010

Я пытаюсь импортировать файл .sql и при создании таблиц происходит сбой.

Вот запрос, который не удался:

CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`value` varchar(15) NOT NULL,
UNIQUE KEY `id` (`id`,`name`),
CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;    

Я экспортировал .sql из той же базы данных, я удалил все таблицы, и теперь я пытаюсь импортировать его, почему он не работает?

MySQL: невозможно создать таблицу './dbname/data.frm' (номер ошибки: 150)

Ответы [ 33 ]

2 голосов
/ 06 января 2015

У меня была такая же ошибка.В моем случае причиной ошибки было то, что в ограничении был оператор ON DELETE SET NULL, в то время как поле, в которое я поместил ограничение в его определении, содержало оператор NOT NULL.Разрешение NULL в поле решило проблему.

2 голосов
/ 06 ноября 2014

Реальный крайний случай - это случай, когда вы использовали инструмент MySQL (в моем случае Sequel Pro) для переименования базы данных.Затем создал базу данных с тем же именем.

Это сохранило ограничения внешнего ключа для того же имени базы данных, поэтому переименованная база данных (например, my_db_renamed) имела ограничения внешнего ключа во вновь созданной базе данных (my_db)

Не уверен, является ли это ошибкой в ​​Sequel Pro, или если какой-то сценарий использования требует такого поведения, но это стоило мне большую часть утра: /

2 голосов
/ 19 сентября 2013

Убедитесь, что столбец первичного ключа и столбец, на который указывает ссылка, имеют одинаковые типы данных и атрибуты (беззнаковые, двоичные, беззнаковое заполнение и т. Д.).

1 голос
/ 02 октября 2012

Возможно это поможет? Определение столбца первичного ключа должно точно соответствовать столбцу внешнего ключа.

1 голос
/ 17 ноября 2017

Создайте таблицу без внешнего ключа, затем установите внешний ключ отдельно.

1 голос
/ 25 октября 2017

У меня возникла та же проблема при выполнении серии команд MySQL.Моя возникает при создании таблицы при обращении внешнего ключа к другой таблице, которая еще не была создана.Это последовательность существования таблицы до обращения к ней.

Решение: сначала создайте родительские таблицы перед созданием дочерней таблицы с внешним ключом.

1 голос
/ 14 апреля 2016

Я исправил проблему, заставив переменную принять null

ALTER TABLE `ajout_norme` 
CHANGE `type_norme_code` `type_norme_code` VARCHAR( 2 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
1 голос
/ 16 июля 2015

У меня была похожая проблема при выгрузке базы данных Django mysql из одной таблицы.Мне удалось решить эту проблему, выгрузив базу данных в текстовый файл, переместив нужную таблицу в конец файла с помощью emacs и импортировав измененный файл дампа sql в новый экземпляр.

HTH Uwe

1 голос
/ 21 марта 2013

Убедитесь, что все таблицы могут поддерживать внешний ключ - InnoDB engine

1 голос
/ 28 ноября 2017

У меня была такая же ошибка, затем я сначала создал ссылочную таблицу, а затем ссылку на таблицу

например, если у вас есть таблицы сотрудников и отделов иностранные ограничение на dept_no в таблице сотрудников затем убедитесь, что отдел таблица создана и ей присвоены ограничения первичного ключа для dept_no.

это сработало для меня ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...