【问题标题】:Mysql errno 150 trying to create table with foreign key referencesMysql errno 150 试图用外键引用创建表
【发布时间】:2013-05-12 15:38:23
【问题描述】:

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

有什么想法吗?提前致谢!

【问题讨论】:

    标签: mysql foreign-keys foreign-key-relationship create-table


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你不能用两种不同的类型来制作引用键

      在databaseA中是整数uid,databaseB是varchar

      试试这个

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

      【讨论】:

      • 虽然他链接到了两种不同的类型,但 MySQL 抱怨的真正问题是他试图在非索引字段上创建引用。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        foreign key 中的type of the field 必须是 same,因为 type of the column 他们是 referencing。我认为这个问题错误是因为外键中的字段类型与它们的列不同'正在参考。 你的外键字段是uid 和引用表你的字段是username。这是问题所在。尝试在table 中使用same 类型的字段像

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

        希望您理解并为您工作。

        【讨论】:

          猜你喜欢
          • 2015-06-20
          • 2012-10-17
          • 2014-04-05
          • 2010-12-17
          • 2016-06-08
          • 2012-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多