关于linux下使用phpmyadmin给mysql表关联外键的问题和解决办法

今天使用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。

以上

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值