【发布时间】:2013-08-06 01:53:36
【问题描述】:
我收到关于 create table 命令重复键的 1022 错误。查看查询后,我无法理解重复发生的位置。其他人可以看到吗?
SQL query:
-- -----------------------------------------------------
-- Table `apptwo`.`usercircle`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `apptwo`.`usercircle` (
`idUserCircle` MEDIUMINT NOT NULL ,
`userId` MEDIUMINT NULL ,
`circleId` MEDIUMINT NULL ,
`authUser` BINARY NULL ,
`authOwner` BINARY NULL ,
`startDate` DATETIME NULL ,
`endDate` DATETIME NULL ,
PRIMARY KEY ( `idUserCircle` ) ,
INDEX `iduser_idx` ( `userId` ASC ) ,
INDEX `idcategory_idx` ( `circleId` ASC ) ,
CONSTRAINT `iduser` FOREIGN KEY ( `userId` ) REFERENCES `apptwo`.`user` (
`idUser`
) ON DELETE NO ACTION ON UPDATE NO ACTION ,
CONSTRAINT `idcategory` FOREIGN KEY ( `circleId` ) REFERENCES `apptwo`.`circle` (
`idCircle`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = INNODB;
MySQL said: Documentation
#1022 - Can't write; duplicate key in table 'usercircle'
【问题讨论】:
-
如果我没记错的话,主键也是一个唯一的索引,所以你必须删除唯一索引语句?
-
ON DELETE NO ACTION只会放弃外键的全部使用。除非你有非常具体的理由这样做。 -
@AmazingDreams 为什么?它仍然强制执行参照完整性。只有您必须自己删除孩子。这比级联删除更安全,在级联删除中,您可能会通过删除一个不正确的关键字而意外删除大量数据。
-
stackoverflow.com/a/5810024/1567737 为什么在使用'aliased'时使用别名可以立即明确目的?
-
@AmazingDreams 感谢您的提示。我也喜欢围绕它展开的辩论——它帮助我了解利弊。
标签: mysql