#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
инструкцию для tableHostel
.2. извините, я забыл его добавить….
3. Пожалуйста, выберите правильные теги для вашего вопроса. SQL Server здесь неуместен, поскольку код не является T-SQL. Выбор правильных тегов даст быстрые и точные ответы.
Ответ №1:
И родительский, и дочерний столбцы имеют одинаковый тип данных и длину, а родительский столбец является основным столбцом, так что проблема здесь не в этом.
Я подозреваю, что проблема в charset
. Hostel_Manager
указывает значение по умолчанию charset
, в то время как Hostel
этого не делает. Если кодировка вашей базы данных по умолчанию отличается от latin1
, то внешняя кодировка имеет неправильную форму.
Я бы рекомендовал явно выровнять charset
, чтобы оно было одинаковым для обеих таблиц (либо удалите обе, либо объявите одно и то же значение).
Обратите внимание, что обе таблицы также должны иметь один и тот же механизм хранения. InnoDB
значение по умолчанию, так что это не должно быть проблемой, но вы можете захотеть явно выровнять и это (в случае, если значение по умолчанию для вашей базы данных является MyISAM
).