Mysql 添加外键时出错

Mysql 添加外键时出错,mysql,sql,foreign-keys,mysql-error-1005,Mysql,Sql,Foreign Keys,Mysql Error 1005,我有两个表:tab1,tab2 我想在tab2中添加一个外键,并编写了这个查询 ALTER TABLE tab2 ADD FOREIGN KEY(name) REFERENCES tab1(name) 但我得到了这个错误: error 1005(HY000):can't create table 'club.#sql-6f0_2' (errno:150) 怎么了 Edit i write this tables only for test. tab1 name char(20) pri

我有两个表:
tab1,tab2

我想在tab2中添加一个外键,并编写了这个查询

ALTER TABLE tab2
ADD FOREIGN KEY(name) REFERENCES tab1(name)
但我得到了这个错误:

error 1005(HY000):can't create table 'club.#sql-6f0_2' (errno:150)
怎么了

Edit

i write this tables only for test.

tab1

name char(20) private key

lname char(20)


tab2

ssn int private key

name char(20)

大约一小时前,我在对你的另一个问题的评论中为你回答了这个问题,但这里又是:

通过运行
SHOW ENGINE INNODB STATUS\G
并阅读
最新外键错误
部分,可以获得该错误的详细信息

导致此故障的最可能原因:

  • tab1.name和tab2.name不是完全相同的数据类型
  • tab1.name不是唯一的

大约一小时前,我在对你的另一个问题的评论中为你回答了这个问题,但这里又是:

通过运行
SHOW ENGINE INNODB STATUS\G
并阅读
最新外键错误
部分,可以获得该错误的详细信息

导致此故障的最可能原因:

  • tab1.name和tab2.name不是完全相同的数据类型
  • tab1.name不是唯一的
试试这个:

alter table tab2
add foreign key my_key(name) references tab1(name)
也许您的密钥应该有一个名称?

试试这个:

alter table tab2
add foreign key my_key(name) references tab1(name)

也许您的密钥应该有一个名称?

您不能在默认的MySQL存储引擎(ISAM、MyISAM)上定义外键,请使用InnoDB作为引擎,然后添加外键约束

您不能在默认MySQL存储引擎(ISAM、MyISAM)上定义外键,请使用InnoDB作为引擎,然后添加外键约束

您使用的是什么数据库管理系统(DBMS)?另外,向我们展示什么是表结构:
showcreatetab1
显示创建表tab2您使用的是什么数据库管理系统(DBMS)?另外,向我们展示什么是表结构:
showcreatetab1
显示创建表tab2该错误意味着两个表都是InnoDB。MyISAM不会因为错误而失败,它会让ALTER表完成,并且由于它没有外键,所以不会以静默方式执行任何操作。MyISAM不会因错误而失败,它会让ALTER表完成并静默不做任何事情,因为它没有外键。+1:也记录了1005/150错误:+1:也记录了1005/150错误: