我正在尝试在两个表之间创建关系。这是每个表和外键创建的查询,
CREATE TABLE IF NOT EXISTS `quotes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`quote` text COLLATE utf8_unicode_ci NOT NULL,
`author` int(11) NOT NULL,
`topic` int(11) NOT NULL,
`language` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `author` (`author`),
KEY `topic` (`topic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `authors` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author` int(11) NOT NULL,
`period` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`photo` text COLLATE utf8_unicode_ci NOT NULL,
`references` text COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `author` (`author`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
ALTER TABLE `quotes` ADD FOREIGN KEY ( `author` ) REFERENCES `mytestdb`.`authors` (
`id`
) ON DELETE RESTRICT ON UPDATE RESTRICT ;
但它抛出了以下错误,
Error creating foreign key on author (check data types)
我不确定这个错误是什么。对此的任何帮助将不胜感激。
答案 0 :(得分:7)
数据类型和符号必须相同
int
与unsigned int
显示宽度无关
author
是一个签名的int
id
是无符号整数
来自manual page:
外键和引用键中的对应列必须 有类似的数据类型。整数类型的大小和符号必须是 相同。字符串类型的长度不必相同。对于 非二进制(字符)字符串列,字符集和排序规则 必须是一样的。
它们具有相同的大小(int)。它们的征兆不同。
显示宽度10和11无关。
create table referenced
( id int(11) primary key
);
create table referencing
( id int primary key,
author int(10) not null,
CONSTRAINT fk_blah FOREIGN KEY (author) REFERENCES referenced(id)
);
没有问题
CREATE TABLE IF NOT EXISTS `quotes` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`quote` text COLLATE utf8_unicode_ci NOT NULL,
`author` int(11) NOT NULL,
`topic` int(11) NOT NULL,
`language` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `author` (`author`),
KEY `topic` (`topic`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `authors` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author` int(11) NOT NULL,
`period` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`photo` text COLLATE utf8_unicode_ci NOT NULL,
`references` text COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `author` (`author`),
CONSTRAINT fk_blah222 FOREIGN KEY (author) REFERENCES quotes(id)
) ENGINE=InnoDB;
没有问题