MySQL错误1215 - 无法添加外键约束

时间:2016-11-01 15:42:46

标签: mysql sql foreign-keys

我有一个格式如下的表users

---------+------------+---------+-------+---------+--------+
  Field  |   type     |    NULL |  Key  |  Deault | Extra  |
------------------------------------------------------------
user_id  | varchar(50)|     NO  |   PRI |  NULL   |        |

我还有一个表history格式如下:

---------+------------+---------+-------+---------+--------+
  Field  |   type     |    NULL |  Key  |  Deault | Extra  |
------------------------------------------------------------
trans_id | int(11)    |     NO  |   PRI |  NULL   |auto_inc|
------------------------------------------------------------
  id     |varchar(50) |    NO   |       | NULL    |        |

当我运行以下命令时,我得到一个error code 1215: cannot add foreign key constraint.

ALTER TABLE history
ADD FOREIGN KEY (id)
REFERENCES users(user_id)

我想确保如果在history中插入了id插入的条目与user_id中的users匹配。 我必须做些什么才能使users.user_id成为history.id的外键?

2 个答案:

答案 0 :(得分:1)

您的代码是正确的,但您的数据类型必须完全匹配才能正常工作。由于它不起作用,因此您最有可能为varchar-columns使用不同的排序规则。

使用describe时不会显示排序规则,因此请使用show create table usersshow create table history进行检查,然后调整其中一个排序规则,使它们相互匹配。

答案 1 :(得分:1)

问题可能是history.id没有编入索引。为了添加外键约束,必须将特定列编入索引。

在历史记录创建脚本中(如果您愿意重新创建表格),在添加约束之前,您可以键入:

<div class="wrap">
  <div class="toggle">
    <input type="checkbox" />
    <span class="btn"></span>
    <span class="texts"></span>
    <span class="bg"></span>
  </div>
</div>

或者要更改当前表,只需输入:

INDEX 'id_index' ('id', ASC)

&#34; ASC&#34;意味着它将按升序编制索引。

您可以在此处详细了解有关索引的信息:http://dev.mysql.com/doc/refman/5.7/en/create-index.html

您可以在此处阅读MySQL中的外键:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

另外,为了彻底,请确保您没有尝试使用&#34; id&#34;作为外键不止一次,因为外键名称必须是唯一的。