无法在相同的可空变量

时间:2016-10-15 12:01:30

标签: mysql foreign-keys innodb

您好, 我在这里看到了这个标题一千次,但我仍然找不到与之匹配的答案。对不起,如果我只是无知。

我们有两张桌子:

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;

嗯..

  • 两个表都是具有相同排序规则的innoDb
  • 两列的数据类型相同(varchar(256) default null
  • 两列具有相同的排序规则
  • 双方设置的索引(即使TableA.string_key索引不唯一也不起作用)
  • 即使设置任何更新/删除事件组合也不起作用
  • 表格是空的。

我缺少什么?或者只是不能在两个可空的varchars之间创建FK?

感谢andvace。

1 个答案:

答案 0 :(得分:0)

错字?

UNIQUE KEY `string_key` (`string_key`(255))

应该是

UNIQUE KEY (`string_key`)

此外,数据类型必须相同,包括长度,这确实是这种情况,只是在实际想要VARCHAR(255)的情况下提及这一点。