您好, 我在这里看到了这个标题一千次,但我仍然找不到与之匹配的答案。对不起,如果我只是无知。
我们有两张桌子:
CREATE TABLE `TableA` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `string_key` (`string_key`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `TableB` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`referring_string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `referring_string_key` (`referring_string_key`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
使用创建FK失败无法添加外键约束。 (别的)
ALTER TABLE `TableB`
ADD FOREIGN KEY (`referring_string_key`) REFERENCES `TableA` (`string_key`) ON DELETE SET NULL ON UPDATE CASCADE;
嗯..
varchar(256) default null
)我缺少什么?或者只是不能在两个可空的varchars之间创建FK?
感谢andvace。
答案 0 :(得分:0)
错字?
UNIQUE KEY `string_key` (`string_key`(255))
应该是
UNIQUE KEY (`string_key`)
此外,数据类型必须相同,包括长度,这确实是这种情况,只是在实际想要VARCHAR(255)
的情况下提及这一点。