数据库学习(MySQL)经典CAP数据库关于主键和外键在表建好以后的添加中遇到的问题及处理

一、遇到的问题:在orders,agents,customers,products都建立好后在orders表中添加外键一个成功,三个失败

mysql> ALTER TABLE ORDERS
    -> ADD FOREIGN KEY(cid) REFERENCES CUSTOMERS(cid);
Query OK, 16 rows affected (0.12 sec)
Records: 16  Duplicates: 0  Warnings: 0

添加cid外键成功

mysql> ALTER TABLE ORDERS
    -> ADD FOREIGN KEY(aid) REFERENCES AGENTS(aid);
ERROR 3780 (HY000): Referencing column 'aid' and referenced column 'aid' in foreign key constraint 'orders_ibfk_2' are incompatible.

添加aid外键失败

mysql> ALTER TABLE ORDERS
    -> ADD FOREIGN KEY(pid)
    -> REFERENCES PRODUCTS(pid);
ERROR 3780 (HY000): Referencing column 'pid' and referenced column 'pid' in foreign key constraint 'orders_ibfk_2' are incompatible.

添加pid外键也失败

 

二、开始找问题

mysql> SHOW CREATE TABLE table_name;

用这个命令来看哪里incompatible了。。。

然后我就发现

orders是这样的

以下分别是agents customers products

一对比,就发现了几个错误,引擎都是默认的innodb,成功的customers表的字符集是utf8,没有后面一长串的,当时建表的时候只有两张表也就是orders和customers表是按照廖雪峰老师的代码来的,也就是建表的时候就设置了引擎和字符集,剩下的两张表products和agents都没有在新建表的时候添加,是软件默认添加的,所以有一长串,然后就incompatible

修改代码:

mysql> alter table agents convert to character set utf8;
Query OK, 6 rows affected, 1 warning (0.08 sec)
Records: 6  Duplicates: 0  Warnings: 1
mysql> ALTER TABLE PRODUCTS CONVERT TO CHARACTER SET UTF8;
Query OK, 7 rows affected, 1 warning (0.10 sec)
Records: 7  Duplicates: 0  Warnings: 1

并且products表还有个问题,建表的时候的疏漏

missing index 

我发现就是忘了给products表建主键pid了

后来加上pid主键 再给orders表添加aid和pid外键就都成功了

 

今天的学习就到这儿吧 还是动手印象深

昨晚因为MySQL出问题捣鼓一整晚,今早放弃,卸干净,重新装的

cmd要管理者权限才能开服务  

路漫漫其修远兮 我的数据库学习之路

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值