ERROR 1005 (HY000): невозможно создать таблицу (errno: 150) - программирование
Подтвердить что ты не робот

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)
4b9b3361

Ответ 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 */;