[英]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 field
的type of the field
必须same
它们referencing
type of the column
的type of the column
same
。我认为这个问题是错误的,因为外键中字段的类型与它们引用的列不同。 你的外键字段是uid
并且引用表你的字段是username
就是问题。尝试在两个table
使用same
类型的字段
FOREIGN KEY (uid) REFERENCES databaseB.users(id)
希望您理解并为您服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.