繁体   English   中英

Mysql errno 150尝试使用外键引用创建表

[英]Mysql errno 150 trying to create table with foreign key references

我正在尝试使用外键引用在mysql中创建一个表,如下所示:

在数据库A中:

CREATE TABLE replication (
  id varchar(255) NOT NULL PRIMARY KEY,
  uid varchar(255) NOT NULL,
  value int(11) NOT NULL,
  FOREIGN KEY (uid) REFERENCES databaseB.users(username)
);

在数据库B中,我有一个名为users的表,如下所示:

+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| id              | varchar(255) | NO   |     | NULL    |       |
| username        | varchar(255) | NO   | PRI | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+

当我尝试创建表复制时,给我以下错误:

ERROR 1005 (HY000): Can't create table 'databaseA.replication' (errno: 150)

任何想法? 提前致谢!

您需要向uid添加索引,否则您将无法将其设置为引用任何内容。

此外,通常在您的DatabaseB中,您的用户表将具有ID上的主键和用户名上的唯一索引。 然后你将从DatabaseA.replication REFERENCES databaseB.users(id)设置一个外键

你不能用两种不同的类型制作参考键

在databaseA中是整数uid,databaseB是varchar

尝试这个

  FOREIGN KEY (uid) REFERENCES databaseB.users(id)

两个数据库是否属于同一类型(MyISAM,INNODB)? 您不能将外键指向MyISAM DB。 当您混合字段类型的类型(在本例中是相同的,varchar(255)),或者字段的编码不同时,也会发生此错误。 另一个原因可能是您无法访问其他数据库。

foreign key type of the fieldtype of the field必须same它们referencing type of the columntype of the column same 。我认为这个问题是错误的,因为外键中字段的类型与它们引用的列不同。 你的外键字段是uid并且引用表你的字段是username就是问题。尝试在两个table使用same类型的字段

 FOREIGN KEY (uid) REFERENCES databaseB.users(id)

希望您理解并为您服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM