我无法在表格中创建外键 - #1005

时间:2013-04-25 17:52:44

标签: mysql key innodb

#1005 - 无法创建表'论坛。#sql-da8_f'(错误号:150)

当我想将外键约束应用于我的表时,我一直收到此错误。我不知道会出现什么问题。我了解到需要使用InnoDB才能在Mysql上使用FOREIGN KEY。默认情况下不是Mysql附带的吗?

顺便说一下,这里

ALTER TABLE boards
ADD FOREIGN KEY (CategoryId)
REFERENCES categories(CategoryId)

编辑: 这就是我创建表格的方式

CREATE TABLE IF NOT EXISTS `boards` (
  `BoardId` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `CategoryId` int(11) DEFAULT '0',
  `ChildLevel` int(11) DEFAULT '0',
  `ParentId` int(11) DEFAULT '0',
  `BoardOrder` int(11) DEFAULT '0',
  `LastMessageId` int(11) DEFAULT '0',
  `MessageUpdatedId` int(11) DEFAULT '0',
  `Groups` varchar(255) DEFAULT '',
  `ProfileId` int(11) DEFAULT '0',
  `BoardName` varchar(255) DEFAULT '',
  `BoardDescription` text,
  `NumberOfTopics` int(11) DEFAULT '0',
  `NumberOfPosts` int(11) DEFAULT '0',
  `CountPosts` int(11) DEFAULT '0',
  `HiddenPosts` int(11) DEFAULT '0',
  `HiddenTopics` int(11) DEFAULT '0',
  PRIMARY KEY (`BoardId`),
  UNIQUE KEY `BoardId` (`BoardId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

这是我的“类别”表:

CREATE TABLE IF NOT EXISTS `categories` (
  `CategoryId` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `CategoryOrder` int(11) DEFAULT '0',
  `CategoryName` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`CategoryId`),
  UNIQUE KEY `CategoryId` (`CategoryId`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=56 ;

1 个答案:

答案 0 :(得分:1)

问题是,类型不匹配:categories上的主键是bigint unsignedboards中的外键是int类型。例如。更改boards表:

CREATE TABLE IF NOT EXISTS `boards` (
  `BoardId` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `CategoryId` bigint(20) unsigned DEFAULT '0',
  -- ...
)

See this demo.