juacala..
10
有很多事情可以导致errno 150,所以对于搜索这个主题的人来说,这就是我认为接近详尽的列表(Errno 150的来源):
对于errno 150或errno 121,只需键入SHOW ENGINE INNODB STATUS,就会出现一个名为"LATEST FOREIGN KEY ERROR"的部分.在此之下它会给你一个非常有用的错误信息,通常会立即告诉你什么是问题.您需要SUPER权限才能运行它,因此如果您没有,则只需测试以下方案即可.
1)数据类型不匹配:列的类型必须相同
2)没有索引的父列(或以错误的顺序索引)
3)列排序不匹配
4)在NOT NULL列上使用SET NULL
5)表排序不匹配:即使列排序匹配,在某些MySQL版本上这可能是个问题.
6)父列在父表中实际上不存在.检查拼写(也许是列的开头或结尾处的空格)
7)其中一列的索引之一是不完整的,或者列对于完整索引而言太长.请注意,MySQL(除非您调整它)的最大单列密钥长度为767字节(这对应于varchar(255)UTF列)
如果你得到一个errno 121,这里有几个原因:
1)您选择的约束名称已被采用
2)在某些系统上,如果语句和表名中存在大小写差异.如果您从一台服务器转到另一台具有不同案例处理规则的服务器,这可能会让您感到困惑.