程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Errno 121,重复写入或更新密钥?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Errno 121,重复写入或更新密钥??

开发过程中遇到Errno 121,重复写入或更新密钥?的问题如何解决?下面主要结合日常开发的经验,给出你关于Errno 121,重复写入或更新密钥?的解决方法建议,希望对你解决Errno 121,重复写入或更新密钥?有所启发或帮助;

这很可能是因为您至少命名了一个约束,且其标识符与列相同:

/* You already have a column named `restaurant` in this table, 
   but are naming the FK CONSTraiNT `restaurant` also... */
CONSTraiNT `restaurant`
    FOREIGN KEY (`restaurant` )
    REFERENCES `mydb`.`restaurants` (`ID` )
    ON deletE NO ACTION
    ON updatE NO ACTION)

应该为约束使用其他标识符,例如fk_restaurant

CONSTraiNT `fk_restaurant`
    FOREIGN KEY (`restaurant` )
    REFERENCES `mydb`.`restaurants` (`ID` )
    ON deletE NO ACTION
    ON updatE NO ACTION)

food表中的相同:

  /* name it fk_food */
  CONSTraiNT `fk_food`
    FOREIGN KEY (`food` )
    REFERENCES `mydb`.`food` (`ID` )
    ON deletE NO ACTION
    ON updatE NO ACTION,
  /* name it fk_restaurant */
  CONSTraiNT `fk_restaurant`
    FOREIGN KEY (`restaurant` )
    REFERENCES `mydb`.`restaurants` (`ID` )
    ON deletE NO ACTION
    ON updatE NO ACTION)

这些是我看到的仅有的三个,但可能还有其他我想念的。

解决方法

SET @OLD_UNIQUE_checKS=@@UNIQUE_checKS,UNIQUE_checKS=0;
SET @OLD_FOREIGN_KEY_checKS=@@FOREIGN_KEY_checKS,FOREIGN_KEY_checKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE scheR_573_11845@A IF NOT EXISTS `mydb` DEFAULT CHARACTER SET laTin1 COLLATE laTin1_swedish_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`restaurants`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`restaurants` (
  `id` int nOT NULL AUTO_INCREMENT,`name` VARCHAR(128) NOT NULL,`description` VARCHAR(1024) NOT NULL,`address` VARCHAR(1024) NOT NULL,`phone` VARCHAR(16) NOT NULL,`url` VARCHAR(128) NOT NULL,`min_order` int nOT NULL,`food_types` SET('pizza','sushi','osetian_pie') NOT NULL,PRIMARY KEY (`id`),UNIQUE INDEX `name_UNIQUE` (`name` ASC),UNIQUE INDEX `id_UNIQUE` (`id` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`regions`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`regions` (
  `id` int nOT NULL AUTO_INCREMENT,`restaurant` int nOT NULL,INDEX `restaurant_idx` (`restaurant` ASC),UNIQUE INDEX `id_UNIQUE` (`id` ASC),CONSTraiNT `restaurant`
    FOREIGN KEY (`restaurant` )
    REFERENCES `mydb`.`restaurants` (`id` )
    ON deletE NO ACTION
    ON updatE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`food`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`food` (
  `id` int nOT NULL,`type` ENUM('pizza',`name` VARCHAR(45) NOT NULL,`ingredients` VARCHAR(256) NULL,`image` VARCHAR(256) NOT NULL,UNIQUE INDEX `id_UNIQUE` (`id` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`food_variant`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`food_variant` (
  `id` int nOT NULL AUTO_INCREMENT,`size` VARCHAR(16) NOT NULL,`weight` VARCHAR(16) NOT NULL,`price` int nOT NULL,`food` int nOT NULL,INDEX `food_idx` (`food` ASC),CONSTraiNT `food`
    FOREIGN KEY (`food` )
    REFERENCES `mydb`.`food` (`id` )
    ON deletE NO ACTION
    ON updatE NO ACTION,CONSTraiNT `restaurant`
    FOREIGN KEY (`restaurant` )
    REFERENCES `mydb`.`restaurants` (`id` )
    ON deletE NO ACTION
    ON updatE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_checKS=@OLD_FOREIGN_KEY_checKS;
SET UNIQUE_checKS=@OLD_UNIQUE_checKS;

Error is:
    ExecuTing SQL script in server
    ERROR: Error 1005: Can't create table 'mydb.food_variant' (errno: 121)

我没有看到重复的约束。它在哪里?

大佬总结

以上是大佬教程为你收集整理的Errno 121,重复写入或更新密钥?全部内容,希望文章能够帮你解决Errno 121,重复写入或更新密钥?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:121