Mysql创建外键时报errno150,Can't create table错误
2020-12-22 15:59
1266 查看
报错原因1: 主键与外键的字符类型不匹配
首先创建两张如下的表然后执行,发现two表创建失败,检查之后分析原因得出是因为主键与外键的字符类型不匹配,one表的id是int类型,two表的tid是char(10)类型,这时只要改为一致的字符类型就解决问题了。
如果发现自己创建的表,主键外键字符类型一样,那就考虑其它可能,请接着看。
create table one( id int primary key, oname VARCHAR(30) ); create table two( tid char(10), tname VARCHAR(30), constraint t_o_sk foreign key (tid) references one(id) on delete cascade on update cascade ##on delete cascade是级联删除,on update cascade 是级联更新 );
报错原因2:主表的主键不是primary key
如果是的话,表又创建好了,那么可以用alter进行修改即可。
这种问题发现没有解决问题的话,那可能下面的考虑第三种情况了。
alter table one modify id int primary key;
报错原因3:检查字符编码是否一致
报错原因4:找不到外键引用的列
列在增加外键的时候,可能已经存在数据了(历史数据,或者更新数据库表时设置的默认值),但这些数据并不一定能在外键关联表中找到对应的行记录。这种情况也会导致外键创建失败。
相关文章推荐
- 关于MySQL索引知识与小妙招 — 学到了!
- MySQL中的 ”SELECT FOR UPDATE“ 一次实践
- 数据库数据过大的系统架构-mysql分库分表高可用面试题
- MySQL锁(四)行锁的加锁规则和案例
- Flink从入门到真香(20、使用flink table api 输出到mysql和es)
- MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?
- Mac mysql 5.7.x 设置服务开机自启动
- MySQL锁(一)全局锁:如何做全库的逻辑备份?
- Mysql临时表突增问题定位与分析
- MySQL锁:03.InnoDB行锁
- MySQL锁:02.InnoDB锁
- MySQL锁:01.总览
- MySQL权限问题
- 搞定MySQL安装难安装贵问题
- Mysql排它锁演示
- mysqlbinlog恢复bin-log数据
- MySQL触发器使用
- 实战 | canal 实现Mysql到Elasticsearch实时增量同步
- 干货 | Debezium实现Mysql到Elasticsearch高效实时同步
- MySQL存储引擎:MyISAM和InnoDB的区别