【问题标题】:#1022 - Can't write; duplicate key in table#1022 - 不能写;表中的重复键
【发布时间】:2014-07-01 09:26:29
【问题描述】:

嗨,我在 mysql phpMyAdmin 中创建表时遇到 1022 错误。 错误在最后一个表“usercomment”上:

解决方案编辑:好的,我已经有一个名为 IdMovie 的约束键,所以我重命名了它,它工作正常。 谢谢各位。

这是表格:

CREATE TABLE IF NOT EXISTS `WhichMovie`.`UserComent` (
  `IDComent` INT NOT NULL,
  `IDUser` INT NOT NULL,
  `IDMovie` INT NOT NULL,
  `date` TIMESTAMP NOT NULL,
  PRIMARY KEY (`IDComent`, `IDUser`, `IDMovie`, `date`),
  INDEX `idUser_idx` (`IDUser` ASC),
  INDEX `idMovie_idx` (`IDMovie` ASC),
  CONSTRAINT `IdComent`
    FOREIGN KEY (`IDComent`)
    REFERENCES `WhichMovie`.`Coment` (`idComent`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `IiUser`
    FOREIGN KEY (`IDUser`)
    REFERENCES `WhichMovie`.`User` (`idUser`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `IdMovie`
    FOREIGN KEY (`IDMovie`)
    REFERENCES `WhichMovie`.`Movie` (`idMovie`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `WhichMovie`.`Movie`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `WhichMovie`.`Movie` (
  `idMovie` INT NOT NULL AUTO_INCREMENT,
  `Ttle` VARCHAR(45) NULL,
  `Year` INT NULL,
  `Country` VARCHAR(45) NULL,
  `Poster` BLOB NULL,
  `Rating` DECIMAL NULL,
  PRIMARY KEY (`idMovie`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `WhichMovie`.`User`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `WhichMovie`.`User` (
  `idUser` INT NOT NULL AUTO_INCREMENT,
  `Username` VARCHAR(45) NOT NULL,
  `Email` VARCHAR(45) NOT NULL,
  `Country` VARCHAR(45) NULL,
  `Pass` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idUser`, `Username`, `Email`),
  UNIQUE INDEX `idUser_UNIQUE` (`idUser` ASC),
  UNIQUE INDEX `Email_UNIQUE` (`Email` ASC),
  UNIQUE INDEX `Username_UNIQUE` (`Username` ASC))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `WhichMovie`.`Coment`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `WhichMovie`.`Coment` (
  `idComent` INT NOT NULL AUTO_INCREMENT,
  `NameComent` VARCHAR(45) NULL,
  PRIMARY KEY (`idComent`),
  UNIQUE INDEX `idComent_UNIQUE` (`idComent` ASC))
ENGINE = InnoDB;

谁能看到?

【问题讨论】:

  • 需要查看引用的表定义。
  • 您还应该向我们提供 UserComment 引用的其他表结构
  • 看来问题不在于结构。创建表和插入数据我没有问题。您是否 100% 确定问题不是在插入数据时出现的?重命名您的 whichmovie 数据库,创建空的 whichmovie 数据库,然后按照我的答案导入这些查询。当您在创建表时启动这些查询时,您真的会看到错误吗?

标签: mysql


【解决方案1】:

根据:MySQL error 1022 when creating table 您不能在整个模型中重复使用外键约束名称。

【讨论】:

    【解决方案2】:

    只需以不同的方式重命名约束名称,您的问题就解决了...

    例子:

     CONSTRAINT `IdComent_CONSTRAINT`
        FOREIGN KEY (`IDComent`)
    

    现在你有一个不同于 THE FOREIGN KEY ONE 的 CONSTRAINT'NAME

    【讨论】:

      【解决方案3】:

      您使用的是什么版本的 MySQL?

      在我使用 MySQL 5.6.12 的本地主机上,此代码(与您的相同,但最后移动了 UserComent 的创建)工作正常:

      -- -----------------------------------------------------
      -- Table `WhichMovie`.`Movie`
      -- -----------------------------------------------------
      CREATE TABLE IF NOT EXISTS `WhichMovie`.`Movie` (
        `idMovie` INT NOT NULL AUTO_INCREMENT,
        `Ttle` VARCHAR(45) NULL,
        `Year` INT NULL,
        `Country` VARCHAR(45) NULL,
        `Poster` BLOB NULL,
        `Rating` DECIMAL NULL,
        PRIMARY KEY (`idMovie`))
      ENGINE = InnoDB;
      
      -- -----------------------------------------------------
      -- Table `WhichMovie`.`User`
      -- -----------------------------------------------------
      CREATE TABLE IF NOT EXISTS `WhichMovie`.`User` (
        `idUser` INT NOT NULL AUTO_INCREMENT,
        `Username` VARCHAR(45) NOT NULL,
        `Email` VARCHAR(45) NOT NULL,
        `Country` VARCHAR(45) NULL,
        `Pass` VARCHAR(45) NOT NULL,
        PRIMARY KEY (`idUser`, `Username`, `Email`),
        UNIQUE INDEX `idUser_UNIQUE` (`idUser` ASC),
        UNIQUE INDEX `Email_UNIQUE` (`Email` ASC),
        UNIQUE INDEX `Username_UNIQUE` (`Username` ASC))
      ENGINE = InnoDB;
      
      -- -----------------------------------------------------
      -- Table `WhichMovie`.`Coment`
      -- -----------------------------------------------------
      CREATE TABLE IF NOT EXISTS `WhichMovie`.`Coment` (
        `idComent` INT NOT NULL AUTO_INCREMENT,
        `NameComent` VARCHAR(45) NULL,
        PRIMARY KEY (`idComent`),
        UNIQUE INDEX `idComent_UNIQUE` (`idComent` ASC))
      ENGINE = InnoDB;
      
      
      
      
      CREATE TABLE IF NOT EXISTS `WhichMovie`.`UserComent` (
        `IDComent` INT NOT NULL,
        `IDUser` INT NOT NULL,
        `IDMovie` INT NOT NULL,
        `date` TIMESTAMP NOT NULL,
        PRIMARY KEY (`IDComent`, `IDUser`, `IDMovie`, `date`),
        INDEX `idUser_idx` (`IDUser` ASC),
        INDEX `idMovie_idx` (`IDMovie` ASC),
        CONSTRAINT `IdComent`
          FOREIGN KEY (`IDComent`)
          REFERENCES `WhichMovie`.`Coment` (`idComent`)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
        CONSTRAINT `IiUser`
          FOREIGN KEY (`IDUser`)
          REFERENCES `WhichMovie`.`User` (`idUser`)
          ON DELETE CASCADE
          ON UPDATE CASCADE,
        CONSTRAINT `IdMovie`
          FOREIGN KEY (`IDMovie`)
          REFERENCES `WhichMovie`.`Movie` (`idMovie`)
          ON DELETE CASCADE
          ON UPDATE CASCADE)
      ENGINE = InnoDB;
      

      表已创建,未发生错误。

      在 5.6.15 上也可以毫无问题地创建表。在 phpmyadmin 设计器的视图下方:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-02
        相关资源
        最近更新 更多