一、遇到的问题:在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要管理者权限才能开服务
路漫漫其修远兮 我的数据库学习之路