【问题标题】:FK constraint is incorrectly formed ERRORFK 约束的格式不正确 ERROR
【发布时间】:2020-09-04 16:30:51
【问题描述】:

每当我尝试将此 sql 文件导入本地主机时,都会收到以下错误消息

(#1005 - 无法创建表 hostel_management_system.Hostel_Manager (errno: 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`)
)

为什么会出现该错误以及如何解决?

【问题讨论】:

  • 请向我们展示表Hostelcreate table 语句。
  • 对不起,我忘了添加它....
  • 请为您的问题选择正确的标签。 SQL Server 在这里无关紧要,因为代码不是 T-SQL。选择正确的标签将产生快速准确的答案。

标签: mysql sql foreign-keys create-table


【解决方案1】:

父列和子列具有相同的数据类型和长度,并且父列是主列,所以这里不是问题。

我怀疑问题出在charsetHostel_Manager 指定默认的charset,而Hostel 没有。如果您的数据库的默认字符集不是latin1,则外部格式错误。

我建议明确对齐 charset,以便两个表相同(删除两者,或声明相同的值)。

请注意,两个表还需要具有相同的存储引擎。 InnoDB 是默认值,所以这应该不是问题,但您可能还想明确地对齐它(如果您的数据库的默认值是 MyISAM)。

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 1970-01-01
    • 2021-11-07
    • 2018-09-04
    • 2017-10-03
    • 2019-07-25
    • 1970-01-01
    • 2017-10-04
    • 2018-06-19
    相关资源
    最近更新 更多