Bil*_*llB 0 mysql foreign-keys mysql-workbench
我有两张桌子:
Table: utenti
Columns:
userId varchar(255) PK
password varchar(255)
Table: agenzie
Columns:
agenziaId varchar(255) PK
userId varchar(255)
Run Code Online (Sandbox Code Playgroud)
当我尝试在agenzie上创建外键时,会出现以下错误消息:
ALTER TABLE agenzie ADD FOREIGN KEY (userId) REFERENCES utenti(userId) Error Code: 1215. Cannot add foreign key constraint 0.015 sec
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
谢谢.
编辑:
DROP TABLE IF EXISTS `utenti`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `utenti` (
`userId` varchar(255) CHARACTER SET latin1 NOT NULL,
`password` varchar(255) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `agenzie`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `agenzie` (
`agenziaId` varchar(255) NOT NULL,
`userId` varchar(255) NOT NULL,
PRIMARY KEY (`agenziaId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 15
你应该能够运行:
show engine innodb status
Run Code Online (Sandbox Code Playgroud)
并搜索短语latest foreign key error(可能是大写).
这应该提供有关约束创建失败原因的更多详细信息.
当然,鉴于错误消息文本完全无用Error Code: 1215. Cannot add foreign key constraint,您必须想知道为什么开发人员不会立即向您提供该信息,而不是强迫您去寻找它.
既然你已经做到了,并且看到了:
2015-02-19 00:51:55 1528表tesoreria/#sql-12a4_bd的外键约束出错:FOREIGN KEY(userId)REFERENCES utenti(userId):在引用的表中找不到引用列的索引表中的第一列或列类型以及引用的表与约束不匹配.请注意,使用> = InnoDB-4.1.12创建的表中ENUM和SET的内部存储类型已更改,旧表中的此类列不能被新表中的此类列引用.
它似乎是两件事之一.第一个是没有索引合并utenti(userId),如果它是主键,显然不是这种情况.
第二个是列不匹配,并且根据您添加的DDL,它似乎可能是罪魁祸首,因为这两列定义为:
`userId` varchar(255) CHARACTER SET latin1 NOT NULL,
`userId` varchar(255) NOT NULL,
Run Code Online (Sandbox Code Playgroud)
换句话说,可能存在使列成为不同类型的字符集规范.我建议创建完全相同的类型,看看是否能解决问题.