MySQL创建外键时报Can‘t create table xxx(errno: 150)错误解决办法

总的来说,这个问题的原因就是创建的外键和关联的表的主键类型不匹配。下面用个简单的例子来说明。

两张很简单的表,学生表和教师表:


 
  
  
  1. CREATE TABLE `t_teacher` (
  2. `id` varchar( 11) NOT NULL,
  3. `name` varchar( 20) DEFAULT NULL,
  4. PRIMARY KEY ( `id`)
  5. ) ENGINE= InnoDB DEFAULT CHARSET=utf8;
  6. CREATE TABLE `t_student` (
  7. `id` varchar( 11) NOT NULL DEFAULT '',
  8. `name` varchar( 20) DEFAULT NULL,
  9. PRIMARY KEY ( `id`)
  10. ) ENGINE= InnoDB DEFAULT CHARSET=utf8;


现在需要给学生表创建一个外键来关联教师表:

第一种情况,很简单,就是列的类型不匹配

比如用int类型的列去关联varchar的列:


 
  
  
  1. ALTER TABLE `t_student`
  2. ADD COLUMN `teacher_id` int( 11) NULL AFTER `name`;
  3. ALTER TABLE `t_student` ADD CONSTRAINT `teacher_id_fk` FOREIGN KEY ( `teacher_id`) REFERENCES `t_teacher` ( `id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

另外一种情况,虽然数据类型一致了,但是字符编码不一致

例如:





最后一种情况则是,找不到外键引用的列。

列在增加外键的时候,可能已经存在数据了(历史数据,或者更新数据库表时设置的默认值),但这些数据并不一定能在外键关联表中找到对应的行记录。这种情况也会导致外键创建失败。




持续更新中…
文章参考学习地址:https://blog.csdn.net/imhuqiao/article/details/51432051

猜你喜欢

转载自blog.csdn.net/weixin_44325444/article/details/107757275