10
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA 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 ,
`name` VARCHAR(128) NOT NULL ,
PRIMARY KEY (`id`) ,
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', 'sushi', 'osetian_pie') NOT NULL ,
`name` VARCHAR(45) NOT NULL ,
`ingredients` VARCHAR(256) NULL ,
`image` VARCHAR(256) NOT NULL ,
PRIMARY KEY (`id`) ,
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 ,
`restaurant` INT NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `id_UNIQUE` (`id` ASC) ,
INDEX `food_idx` (`food` ASC) ,
INDEX `restaurant_idx` (`restaurant` 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 [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
Error is:
Executing SQL script in server
ERROR: Error 1005: Can't create table 'mydb.food_variant' (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
같은 제한 조건에 대해 서로 다른 ID를 사용해야합니다 :
CONSTRAINT `fk_restaurant`
FOREIGN KEY (`restaurant`)
REFERENCES `mydb`.`restaurants` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
을 당신이 열과 동일한 식별자를 가진 적어도 하나 개의 제약 조건 이름 때문에
감사합니다. – arts777
누군가가이 문제에 부딪 힐 경우. 여러 테이블에 걸쳐 제약 조건 이름을 변경 한 후에도 errno 121이 나타납니다. 문제는 다른 테이블에서도 동일한 제약 조건 이름을 사용할 수 없다는 것입니다. 나는 'fk_entryid'를 table1과 table2에서 사용하고 있으며 각각 'fk_table1_entryid'와 'fk_table2_entryid'로 변경해야만 작동합니다. 이 문제는 MySQLWorkbench와 MariaDB에서 발생했습니다. –