大佬教程收集整理的这篇文章主要介绍了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,请注明来意。