ERROR 1005 (HY000): невозможно создать таблицу (errno: 150)
Я получаю сообщение об ошибке при попытке создать таблицу в mysql.
Какие-нибудь советы по его разрешению?
create table stock_in(
ind int not null auto_increment,
itemcode varchar(10) not null,
quantity int not null,
description text not null,
sales_ref int not null default -1,
return_outwards_ref int not null default -1,
stock_in_receipt_ref int not null default -1,
date text not null,
time text not null,
username text not null,
foreign key (sales_ref) references sales (receiptno),
foreign key (return_outwards_ref) references returnoutwards(ind),
primary key (ind)
);
Ошибка:
ERROR 1005 (HY000): Can't create table 'posinventory.stock_in' (errno: 150)
Ответы
Ответ 1
Ознакомьтесь с руководством по MySQL о ограничениях внешнего ключа:
Если вы заново создали таблицу, которая была удалена, она должна иметь определение который соответствует ограничениям внешнего ключа, ссылающимся на него. Это должно имеют правильные имена и типы столбцов и должны иметь индексы на как указано ранее. Если они не выполнены, MySQL возвращает номер ошибки 1005 и ссылается на ошибку 150 в ошибке сообщение.
Несколько идей:
- Лучше отбросьте таблицы и создайте их с помощью хорошо сформированного синтаксиса.
- Обязательно добавьте
ENGINE=InnoDB;
к вашей команде CREATE TABLE
.
- Убедитесь, что InnoDB включен на вашем сервере MySQL. Чтобы проверить это, попробуйте выполнить следующую команду:
SHOW VARIABLES LIKE 'have_innodb';
- если он возвращает YES, тогда включена функция InnoDB.
- Проверьте свою команду для верхних и нижних регистров в именах таблиц и полей.
- Проверьте это не только на таблицу, которую вы хотите создать, но также на таблицы, на которые ссылаются внешние ключи.
- Убедитесь, что указанные таблицы правильно проиндексированы.
Ответ 2
Была такая же проблема. Источником этого является тип для внешнего ключа и ссылки.
Внешний ключ:
fer_id SMALLINT NOT NULL
и поле происхождения (обратитесь к которому мы предоставляем):
id INT(11) UNSIGNED NOT NULL
Я только что сделал fer_id INT (11) UNSIGNED. Волшебно работает!
Ответ 3
Одна из причин заключается в том, что тип данных столбца внешнего ключа и длина должны быть такими же, как столбец ключевой таблицы ссылок. Например, столбец ссылочной таблицы - это mediumint (11), а столбец внешнего ключа - int (11) означает, что ошибка возникает при создании таблицы с внешним ключом.
Ответ 4
Помимо других вещей, вам нужно убедиться, что обе таблицы/поля соответствуют настройкам CHARSET. Поле типа UTF может быть существенно другого размера, чем "latin1".
SHOW CREATE TABLE на обеих таблицах покажет вам, есть ли несоответствие
Ответ 5
Если вы восстановите резервную копию базы данных, вы можете временно отключить проверку внешних ключей, вставив эти строки в начало файла .sql:
/*!40030 SET NAMES UTF8 */;
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;