关于linux下使用phpmyadmin给mysql表关联外键的问题和解决办法
2012-08-13 12:35
615 查看
今天使用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。
以上
#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。
以上
相关文章推荐
- 关于linux下使用phpmyadmin给mysql表关联外键的问题和解决办法
- linux环境下mysql5.6的安装、配置、使用及常见问题解决办法
- 关于使用DirectShow架构,传输YUV420数据的Filter与Video Renderer Filter连接问题的解决办法。
- linux下mysql 使用mysql -uroot -p输入密码无法登录问题的解决
- Mysql联合查询UNION和Order by同时使用报错问题的解决办法
- 在XP下使用putty连接虚拟机中的linux出现主机拒绝的问题解决办法
- 关于控件注册和使用许可问题的解决办法
- 关于使用cocoaPods,import导入时第三方库头文件没有提示问题的解决办法
- 关于linux下安装jkd,配置环境变量遇到的问题,及其解决办法
- 个人关于hadoop使用LZO压缩主要步骤以及带来的后续问题和解决办法
- linux系统下mysql快速安装使用、远程访问及中文乱码问题解决
- 在Ubuntu/Linux环境下使用MySQL:解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large的问题
- 关于Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题及解决办法
- Linux安装了mysql,访问不了mysql的问题解决办法
- 关于php集成环境mysql wamp 修改密码后phpMyAdmin拒绝访问解决办法
- 关于kudu使用的一些问题及解决办法
- 关于linux下部署项目时遇到MYSQL_ATTR_INIT_COMMAND未定义时解决办法
- Linux 使用yum install安装mysql登陆不上解决办法
- 关于spring使用new对象时注解失效问题解决办法
- Linux(LAMPP)下使用MySQL时不能正常显示中文的解决办法