2012-02-23 3 views
1

저는 초보자이며, 간단한 질문이 있습니다. 내 스키마 (서점)에 3 개의 테이블이 있습니다. 나는 그들 사이의 관계를 갖고 싶다. 내 테이블 : books (book_id, book_name, book_entity), customer (customer_id, customer_name), orders (book_id, customer_id, quantity)mysql 워크 벤치의 외래 키

외래 키 이름 (book_id 및 CUSTOMER_ID), 참조 테이블 ( '서점', '책' '서점', '고객')

: 나는 다음과 같은 주문 테이블의 외래 키를 설정

처음에 나는 고객 테이블에 데이터를 삽입하려고 할 때 나는 오류 다음 한 책 테이블을 작성하지만 :

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`bookshop`.`customer`, CONSTRAINT `customer_id` FOREIGN KEY (`customer_id`) REFERENCES `order` (`customer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

SQL Statement: 

INSERT INTO `bookshop`.`customer` (`customer_id`, `customer_name`, `customer_address`) VALUES (2, 'helen', 'newyork') 

내가 무엇을 할 것인가?

내 코드 :


-- Table `bookshop`.`books` 

-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `bookshop`.`books` (

    `book_id` INT NOT NULL , 

    `book_name` VARCHAR(45) NOT NULL , 

    `book_price` DECIMAL NOT NULL , 

    `book_entity` INT NOT NULL , 

    PRIMARY KEY (`book_id`)) 

ENGINE = InnoDB; 





-- ----------------------------------------------------- 

-- Table `bookshop`.`customer` 

-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `bookshop`.`customer` (

    `customer_id` INT NOT NULL , 

    `customer_name` VARCHAR(45) NOT NULL , 

    `customer_address` VARCHAR(45) NOT NULL , 

    PRIMARY KEY (`customer_id`)) 

ENGINE = InnoDB; 





-- ----------------------------------------------------- 

-- Table `bookshop`.`orders` 

-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `bookshop`.`orders` (

    `book_id` INT NOT NULL , 

    `customer_id` INT NOT NULL , 

    `quantity` INT NOT NULL , 

    INDEX `book_id` (`book_id` ASC) , 

    INDEX `customer_id` (`customer_id` ASC) , 

    CONSTRAINT `book_id` 

    FOREIGN KEY (`book_id`) 

    REFERENCES `bookshop`.`books` (`book_id`) 

    ON DELETE NO ACTION 

    ON UPDATE NO ACTION, 

    CONSTRAINT `customer_id` 

    FOREIGN KEY (`customer_id`) 

    REFERENCES `bookshop`.`customer` (`customer_id`) 

    ON DELETE RESTRICT 

    ON UPDATE RESTRICT) 

ENGINE = InnoDB; 
+0

이것은 기본 테이블에'customer_id'가있는 주 테이블에 상응하는'customer_id'가 없기 때문입니다. –

+1

__foreign 키 이름 참조 테이블 book_id 'bookshop', 'books'customer_id 'bookshop', 'customer'__는별로 의미가 없습니다. goreign 키를 어떻게 정의했는지 다시 작성하십시오. –

+0

나는 내 테이블 사이의 관계를 원하고 있습니다. 외래 키 : 내 주문 테이블의 customer_id 및 book_id (기본 키도 있음) – samira

답변

0

귀하의 외래 키 문은 떨어져 보인다, 당신은 외래 키를 만드는 데 사용에 대한 설명을 제공하십시오.

그러나 고객에게 주문한 경우에만 고객을 삽입 할 수있는 외래 키를 만들었습니다. 아마 다른 방향으로하고 싶을 것입니다.

+0

나는 workbench를 사용하고 데이터 모델링에서는 주문 테이블의 외래 키를 설정합니다. – samira

+0

제공하신 코드는 괜찮아 보입니다. 주변에서 놀거나 다른 곳에서 다른 외래 키가있을 수 있습니다. 다른 제약 조건이 정의되어 있지 않으면 customer.customer_id의 오류 조건이 특히 – Tim

+0

입니다. Tim, 내 문제를 해결해 주셔서 감사합니다. 내 주문 테이블의 기본 키를 다시 설정합니다. 나는 초보자이며 mysql에서 미친 실수를 가지고있다. – samira

0

오류가 발생한 이유는 integrity constraints입니다. 문제는 잘못된 참조가있는 데이터 집합을 추가하려고하는 것입니다. 대부분 외부 키가 존재하지 않는 기본 키를 가리키기 때문입니다. 귀하의 경우 이것은 아마 당신이 고객을 추가하고 고객이 어떻게 든 참조가 유효하지 않기 때문일 것입니다. 아마도 관계가 겹칠 것입니다. 관계에 대한 자세한 정보가 없으면 그냥 추측하는 것입니다.