0

#1005 - 无法创建表 'forum.#sql-da8_f' (errno: 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 ;
4

1 回答 1

1

问题是,类型不匹配:您的主键 oncategoriesbigint unsigned而您的外键 inboards是 type int。例如更改boards表格:

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

看这个演示。

于 2013-04-25T18:15:04.940 回答