Ошибка, связанная с ограничением FK, неправильно сформирована

#mysql #sql #foreign-keys #create-table

#mysql — сервер #sql #внешние ключи #создать таблицу #mysql

Вопрос:

Всякий раз, когда я пытаюсь импортировать этот SQL-файл на свой localhost, я получаю следующее сообщение об ошибке

(#1005 — Не удается создать таблицу hostel_management_system . Hostel_Manager (ошибка: 150 «Неправильно сформировано ограничение внешнего ключа»))

Вот sql:

 DROP TABLE IF EXISTS `Hostel_Manager`;

CREATE TABLE `Hostel_Manager` (
  `Hostel_man_id` int(10) NOT NULL AUTO_INCREMENT,
  `Username` varchar(255) NOT NULL,
  `Fname` varchar(255) NOT NULL,
  `Lname` varchar(255) NOT NULL,
  `Mob_no` varchar(255) NOT NULL,
  `Hostel_id` int(10) NOT NULL,
  `Pwd` LONGTEXT NOT NULL,
  `Isadmin` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`Hostel_man_id`),
  UNIQUE (`Username`),
  KEY `Hostel_id` (`Hostel_id`),
  CONSTRAINT `Hostel_Manager_ibfk_1` FOREIGN KEY (`Hostel_id`) REFERENCES `Hostel` (`Hostel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


LOCK TABLES `Hostel_Manager` WRITE;

UNLOCK TABLES;
  

Стол в общежитии :

 CREATE TABLE `Hostel` (
  `Hostel_id` int(10) NOT NULL AUTO_INCREMENT,
  `Hostel_name` varchar(255) NOT NULL,
  `current_no_of_rooms` varchar(255) DEFAULT NULL,
  `No_of_rooms` varchar(255) DEFAULT NULL,
  `No_of_students` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Hostel_id`)
)
  

Почему я получаю эту ошибку и как ее исправить?

Комментарии:

1. Пожалуйста, покажите нам также create table инструкцию для table Hostel .

2. извините, я забыл его добавить….

3. Пожалуйста, выберите правильные теги для вашего вопроса. SQL Server здесь неуместен, поскольку код не является T-SQL. Выбор правильных тегов даст быстрые и точные ответы.

Ответ №1:

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

Я подозреваю, что проблема в charset . Hostel_Manager указывает значение по умолчанию charset , в то время как Hostel этого не делает. Если кодировка вашей базы данных по умолчанию отличается от latin1 , то внешняя кодировка имеет неправильную форму.

Я бы рекомендовал явно выровнять charset , чтобы оно было одинаковым для обеих таблиц (либо удалите обе, либо объявите одно и то же значение).

Обратите внимание, что обе таблицы также должны иметь один и тот же механизм хранения. InnoDB значение по умолчанию, так что это не должно быть проблемой, но вы можете захотеть явно выровнять и это (в случае, если значение по умолчанию для вашей базы данных является MyISAM ).