문제

내가 사용하는 MySQL 워크벤치를 데이터베이스를 생성하고 지금 나는 삽입 명령 라인을 사용하여 클라이언트:

mysql>.C:\Documents 고 설정\kdegroote\나 Documents\학교\2008-2009\ICT2 \Gegevensbanken\Labo\Hoofdstuk3 를 해결하 6\pizzasecondtry.sql

어떤 이유로,마지막 표 허용되지 않습니다."만들 수 없습니다"테이블은 오류 메시지가 표시됩니다.

나는 수동으로 편집 해 데이터에 기본적으로,동일없이 특별한 옵션은 작업대에 추가 그것과 같습니다.

나는 공부하고 원만하지 않는 이유를 이해하지는 않습여 테이블이 있습니다.그래서 제가 궁금했던 사람이 여기에 있을 수 있었습니다.어쩌면 다른 사람이 내가 무슨 즐.

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';

CREATE SCHEMA IF NOT EXISTS `PizzaDelivery` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `PizzaDelivery`;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Visitors` (
  `visitor_id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `adres` VARCHAR(45) NOT NULL ,
  `telephone` MEDIUMBLOB NOT NULL ,
  `email` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`visitor_id`))ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Employees` (
  `employee_id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`employee_id`))ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Orders` (
  `order_id` INT NOT NULL AUTO_INCREMENT ,
  `pizza` VARCHAR(45) NOT NULL ,
  `extra` VARCHAR(45) NULL ,
  `kind` VARCHAR(45) NOT NULL ,
  `amount` VARCHAR(45) NOT NULL ,
  `visitor_id` INT NOT NULL ,
  `employee_id` INT NOT NULL ,
  `order_time` TIME NOT NULL ,
  PRIMARY KEY (`order_id`) ,
  INDEX `visitor_id` (`visitor_id` ASC) ,
  INDEX `employee_id` (`employee_id` ASC) ,
  CONSTRAINT `visitor_id`
    FOREIGN KEY (`visitor_id` )
    REFERENCES `PizzaDelivery`.`Visitors` (`visitor_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `employee_id`
    FOREIGN KEY (`employee_id` )
    REFERENCES `PizzaDelivery`.`Employees` (`employee_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Deliveries` (
  `employee_id` INT NOT NULL ,
  `order_id` INT NOT NULL ,
  `voertuig_id` INT NOT NULL ,
  `deliverytime` TIME NOT NULL ,
  PRIMARY KEY (`employee_id`, `order_id`) ,
  INDEX `employee_id` (`employee_id` ASC) ,
  INDEX `order_id` (`order_id` ASC) ,
  CONSTRAINT `employee_id`
    FOREIGN KEY (`employee_id` )
    REFERENCES `PizzaDelivery`.`Employees` (`employee_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `order_id`
    FOREIGN KEY (`order_id` )
    REFERENCES `PizzaDelivery`.`Orders` (`order_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;
도움이 되었습니까?

해결책

당신이 얻을 수 있는 더 많은 정보에 InnoDB 오류가 다음과 같다:

mysql> SHOW ENGINE INNODB STATUS;

출력은 얼마나 오랫동안 사이에서의 상태 출력을 나는 이것을 보았다:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
081221 12:02:36 Error in foreign key constraint creation 
for table `pizzadelivery/deliveries`.
A foreign key constraint of name `pizzadelivery/employee_id`
already exists. 

문제는 DeliveriesOrders 테이블 모두를 선언한 외국인 핵심 제약 조건이라는 이름 employee_id.

제약 조건을 이름에서 고유해야 합 모든 테이블에서는 주어진 데이터베이스입니다.는"errno:121"는 InnoDB 오류 코드가 나타내는 중복된 키 오류가 있습니다.이 경우,고유성의 제약을 이름은 만족하지 않습니다.

이 문제를 해결할 수 있는 여전히 외국의 열쇠 제약하면 당신은 단지의 이름을 변경하 선언 제약 조건을 예를 들어:

CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Deliveries` (
  . . .
  CONSTRAINT `employee_id2`
    FOREIGN KEY (`employee_id` )
  . . .

다른 팁

문제 해결됨.

나는 우연히 여기서 내 문제를 해결했다. 문제는 "배달"테이블의 제약으로 보였다.

2 개의 Primairy 키는 동시에 외래 키이며 제한하려면 생성 및 오류가 발생합니다.

그래서 나는 단순히 제약 조건을 제외하고 모든 것이 작동합니다.

노력하다 use PizzaDelivery 쇼 테이블을 실행하기 전에. 당신은 당신의 테이블을 만들었습니다 PizzaDelivery 스키마이지만 아마도 다른 기본 스키마와 연결되어있을 것입니다. 기본 스키마는 MySQL 명령 줄 클라이언트의 매개 변수입니다.

$ mysql -h <db-host> -u <username> -p <schema-name>

(참고 : -p는 인수가 주어지지 않을 때 암호를위한 프롬프트를 의미합니다. 일반적으로 인수가 PS 출력에 표시되고 쉘 기록에서 디스크에 저장되기 때문에 일반적으로 수행하지 않아야합니다. 모든 명령 줄 매개 변수는 선택 사항입니다. )

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top