FK 约束的格式不正确 ERROR
FK constraint is incorrectly formed ERROR
每当我尝试将此 sql 文件导入本地主机时,我都会收到以下错误消息
(#1005 - Can't create table hostel_management_system
.Hostel_Manager
(errno: 150 "Foreign key constraint is incorrectly formed"))
这是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;
宿舍table:
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`)
)
为什么会出现该错误以及如何解决?
父列和子列都具有相同的数据类型和长度,并且父列是主列,所以这不是这里的问题。
我怀疑是charset
的问题。 Hostel_Manager
指定默认值 charset
,而 Hostel
则不指定。如果你的数据库的默认字符集不是 latin1
,那么外来字符集是错误的。
我建议明确对齐 charset
以便两个表都相同(要么删除两者,要么声明相同的值)。
请注意,两个表还需要具有相同的存储引擎。 InnoDB
是默认值,所以这应该不是问题,但您可能也想明确对齐它(以防数据库的默认值是 MyISAM
)。
每当我尝试将此 sql 文件导入本地主机时,我都会收到以下错误消息
(#1005 - Can't create table
hostel_management_system
.Hostel_Manager
(errno: 150 "Foreign key constraint is incorrectly formed"))
这是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;
宿舍table:
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`)
)
为什么会出现该错误以及如何解决?
父列和子列都具有相同的数据类型和长度,并且父列是主列,所以这不是这里的问题。
我怀疑是charset
的问题。 Hostel_Manager
指定默认值 charset
,而 Hostel
则不指定。如果你的数据库的默认字符集不是 latin1
,那么外来字符集是错误的。
我建议明确对齐 charset
以便两个表都相同(要么删除两者,要么声明相同的值)。
请注意,两个表还需要具有相同的存储引擎。 InnoDB
是默认值,所以这应该不是问题,但您可能也想明确对齐它(以防数据库的默认值是 MyISAM
)。