mysql错误代码1022表中存在重复键
我搜索了之前的帖子,但没有找到答案,所以这里是 我有这张桌子mysql错误代码1022表中存在重复键,mysql,foreign-keys,Mysql,Foreign Keys,我搜索了之前的帖子,但没有找到答案,所以这里是 我有这张桌子 CREATE TABLE `leags` ( `lid` int(10) NOT NULL AUTO_INCREMENT, `lName` varchar(255) NOT NULL, `description` varchar(255) DEFAULT NULL, `links` varchar(255) DEFAULT NULL, `cid` int(10) NOT NULL, PRIMARY
CREATE TABLE `leags`
(
`lid` int(10) NOT NULL AUTO_INCREMENT,
`lName` varchar(255) NOT NULL,
`description` varchar(255) DEFAULT NULL,
`links` varchar(255) DEFAULT NULL,
`cid` int(10) NOT NULL,
PRIMARY KEY (`lid`),
KEY `index2` (`lid`,`lName`),
KEY `index3` (`lid`,`lName`,`cid`),
KEY `cid_idx` (`cid`),
CONSTRAINT `cid` FOREIGN KEY (`cid`) REFERENCES `cats` (`cid`)
)
ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='Leagues'$$
我有另一个表,上面的PK作为外键
CREATE TABLE `tams`
(
`tId` INT(10) NOT NULL ,
`tName` VARCHAR(255) NOT NULL ,
`lid` INT(10) NULL ,
`url` TEXT NULL ,
PRIMARY KEY (`tId`) ,
INDEX `index2` (`tId` ASC, `tName` ASC) ,
INDEX `index3` (`tId` ASC, `tName` ASC, `lid` ASC) ,
INDEX `lid_idx` (`lid` ASC) ,
CONSTRAINT `lid`
FOREIGN KEY (`lid` )
REFERENCES leags` (`lid` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
这个表的创建很好,但是我在创建下表时遇到了一个问题
CREATE TABLE IF NOT EXISTS spSched
(
`spscId` INT(10) NOT NULL AUTO_INCREMENT ,
`startDate` DATE NOT NULL ,
`endDate` DATE NULL ,
`startTime` TIME NOT NULL ,
`endTime` TIME NULL ,
`htId` INT(10) NULL ,
`type` VARCHAR(45) NULL ,
`atId` INT(10) NULL ,
`leagId` INT(10) NULL ,
PRIMARY KEY (`spscId`) ,
UNIQUE INDEX `spscId_UNIQUE` (`spscId` ASC) ,
INDEX `htId_idx` (`htId` ASC) ,
INDEX `atId_idx` (`atId` ASC) ,
INDEX `lid_idx` (`leagId` ASC) ,
CONSTRAINT `tId`
FOREIGN KEY (`htId` )
REFERENCES tams (`tId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `atId`
FOREIGN KEY (`atId` )
REFERENCES tams` (`tId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `lId`
FOREIGN KEY (`leagId` )
REFERENCES leags (`lid` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
如果我将lId作为FK移除,并从上面的sql中移除约束,那么表将创建得很好。我想不出重复的钥匙在哪里。非常感谢您的帮助。
谢谢。lId表tams lId中已经有了此名称的约束
我怀疑你的系统不区分大小写
InnoDB在内部将外键约束名称存储为
不区分大小写,数据库名称前面有前缀。所以尽管
onedatabase.b_ibfk_1被视为不同于
另一个数据库是.b_ibfk_1、Photos.b_ibfk_1和Photos.b_ibfk_1
一视同仁
只需为该键选择另一个名称。请修复格式。格式已修复。奇怪的是,使用代码或块引号无法修复它,必须手动添加空格:我可能错了,但你的索引名在数据库中重复,它们必须是唯一的。你是在windows还是MAC上?@Mihai你为什么坚持称它为MAC?那意味着什么,就是这样!当我将约束更改为leagId时,表只创建了fone。非常感谢。