3

我正在尝试使用外键引用在 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)

任何想法?提前致谢!

4

4 回答 4

4

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

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

于 2013-05-17T12:56:44.617 回答
2

您不能使用两种不同类型的参考键

在 databaseA 中是整数 uid 而 databaseB 是 varchar

尝试这个

  FOREIGN KEY (uid) REFERENCES databaseB.users(id)
于 2013-05-17T13:03:07.907 回答
1

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

于 2013-05-17T12:56:38.367 回答
1

type of the fieldin aforeign key必须是same它们type of the column的样子referencing。我认为这个问题是错误的,因为外键中的字段类型与它们引用的列不同。您的外键字段uid和引用表是您的字段。这username是问题所在。尝试same在两者中使用字段table类型

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

希望您理解并为您工作。

于 2013-05-17T13:03:18.000 回答