/ 中存储网

使用phpMyAdmin设置MySQL表关联外键的方法

2014-07-13 15:36:28 来源:中存储网

今天使用phpmyadmin关联外键的时候一直报错

#1452 - Cannot add or update a child row: a foreign key constraint fails......

弄了半天 终于解决了这个问题  以下就是几点需要注意的地方

首先:要知道

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。
外键的使用条件:
1.两个表必须是 InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以

其次:去实践

由于表中已经有了数据,需要关联的字段可能会因为数据的不一致而导致关联失败。

1.首先看看两个表是不是一样的字段,如果不是,改成一样的字段,字段名可以不一样,但是字段类型必须一样,如果是,就看看两个表中这个字段中的数据是否一一对应。

2.在linux的终端里进入mysql,进去后使用

select * from 表1 where 表1中的字段 not in (select 表2中的字段 from 表2);

如果有结果,在phpmyadmin中删除这些结果。

如果没有结果,将这个语句反过来用一下,即:

select * from 表2 where 表2中的字段 not in (select 表1中的字段 from 表1);

如果有结果,删除之,如果没有结果,继续。

3.在phpmyadmin中找到想要关联外键的那个表,点击下边的索引,看看你的索引有没有什么问题,重复的无效的等等,解决之后继续。

4.在phpmyadmin中找到想要关联外键的那个表,点击下边的查看关系,找到你想要的字段,点击旁边的下拉框,然后正常按程序走,最后执行就完事了。

最后:总结

解决这个问题用了2个多小时,总是失败,不知道什么原因,还好没有激动一下把数据都删掉,建议在建表之前就想好关系,在建表的时候就把关系直接添加上,没有数据还是很容易添加的。

最最后:提醒

两个表一定要都是InnoDB类型的,MYISAM是不好用的,想知道为啥,去google。