23

我有一个包含列的表 CustomizationSet:

customization_set_guid (which is a non-nullable guid and also the primary key)
creator_account_guid
and a few others

以及一个包含现有数据的表注册与列:

registration_id (an int and the primary key)
customization_set_guid (also a guid (so a char(36)) which is nullable, and all entries are currently null)
and a few other columns

当我尝试跑步时

ALTER TABLE Registration ADD FOREIGN KEY 
    (
        customization_set_guid
    ) REFERENCES CustomizationSet (
        customization_set_guid
    );

在 MySQL Workbench 中,它给出了错误 1050Table '.\dbname\registration' 已经存在。

如果我尝试使用 UI 通过 Alter Table 对话框的 Foreign Keys 选项卡添加外键,并选择 CustomizationSet 作为引用表,它不会让我在列列表中选择 customization_set_guid。

我真的不知道为什么它不会让我添加这个外键。我刚刚在刚刚添加的表之间成功创建了外键。注册表已经存在了一段时间......

4

9 回答 9

11

我得到了同样的错误,这是由于外键已经存在。你想要的只是添加约束:

ALTER TABLE Registration 
  ADD CONSTRAINT idx_Registration_CustomizationSet 
  FOREIGN KEY (customization_set_guid) 
  REFERENCES CustomizationSet(customization_set_guid);
于 2011-10-24T08:22:13.077 回答
2

看起来这里的 MySQL 有一个错误报告:

MySQL 错误 55296

最后,我猜他们升级了他们的服务器并解决了这个问题。从阅读中,我不确定。他们确实有一些解决方法,例如输入约束名称/更改它们。如果您认为这是相同的,我会要求重新打开该错误。

有一次,他们提到类型不匹配并且工作台响应错误错误(应该是 errno 150 或 errno 121)。您可以在此处查看这些错误的原因: MySQL Foreign Key Errors and Errno 150

于 2012-06-15T18:09:05.977 回答
2

所以一个团队成员想通了。一张表设置为 utf8_general 类型,另一张表设置为默认类型。我不认为这是一个问题,因为默认值是 utf8_general,但显然 mysql 只查看类型名称而不是底层类型。

于 2012-06-29T18:38:54.560 回答
1

我遇到了同样的错误,由于我的案例还没有被提及,我会发布这个答案,希望它可以节省别人的时间!

我的两个表引擎,不同的地方。一个是 InnoDB,另一个是 MyIsam。

要更改表的引擎:

选择表,点击alter table,然后点击Workbench最右侧的双箭头(因此它会指向上方)。

现在换发动机!

于 2013-05-02T01:00:19.150 回答
1
  • 检查 CustomizationSet 表的存储引擎类型。

我有同样的问题,但我可以通过将引擎类型更改为 InnoDB 来解决它,因为很少有类型不支持外键约束。

于 2013-10-03T06:57:54.187 回答
0

我不确定这是否是一个错字,但不应该是

ALTER TABLE Registration ADD FOREIGN KEY 
(
    customization_set_guid
) REFERENCES CustomizationSet (
    customization_set_guid
);

ALTER TABLE Registration ADD FOREIGN KEY 
customization_set_guid_fk (customization_set_guid) 
REFERENCES CustomizationSet (customization_set_guid);
于 2011-08-10T23:31:45.053 回答
0

不确定表是否已经存在,但它不允许您选择所需列的原因很可能是由于列的类型不同。检查以确保它们都是相同的类型、相同的长度并且具有所有相同的选项。

于 2011-08-10T23:34:26.717 回答
0

我有一个类似的问题,最后是Integrity Constraint的问题。外键列引用了一个不存在的外来列。

尝试运行以下命令来测试是否是这种情况:

select r.customization_set_guid, c.customization_set_guid
from Registration r
right join CustomizationSet c
on 
r.customization_set_guid = c.customization_set_guid
where isnull(c.customization_set_guid);
于 2014-01-20T14:03:49.180 回答
0

使用 MysqlWorkbench 时,该错误具有误导性。我的问题是我试图在已经有行并且其中一行为空的表上添加外键约束(不符合 FK 约束。MysqlWorkbench 没有抱怨如果应用约束将失败,而是报告该表存在。

删除固定的违规行(或向该字段添加和约束可接受的值)解决了该问题。

于 2017-10-31T21:46:55.430 回答