数据库学习(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了。。。

然后我就发现

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

orders是这样的

以下分别是agents customers products

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

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

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

一对比,就发现了几个错误,引擎都是默认的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)经典CAP数据库关于主键和外键在表建好以后的添加中遇到的问题及处理_第5张图片

 

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

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

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

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

你可能感兴趣的:(数据库学习之路,大二)