我有一个格式如下的表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
的外键?
答案 0 :(得分:1)
您的代码是正确的,但您的数据类型必须完全匹配才能正常工作。由于它不起作用,因此您最有可能为varchar-columns使用不同的排序规则。
使用describe
时不会显示排序规则,因此请使用show create table users
和show 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;作为外键不止一次,因为外键名称必须是唯一的。