2013-06-09 1 views
0
나는 데이터베이스를 만들려고 해요

, 나는 코드, 나는 다음과 같은 오류를 얻을 phpMyAdmin에로 가져올 서면으로 작성했습니다 쓰여진 것 :MySQL의 오류 # 1064에서 테이블 만들기

CREATE DATABASE MAWARID; 
USE MAWARID; 

CREATE TABLE TOPIC (
    TOPIC_ID INT NOT NULL AUTO_INCREMENT, 
    TOPIC_NAME VARCHAR(30) NOT NULL, 

    PRIMARY KEY (TOPIC_ID) 
); 

CREATE TABLE QUESTION (
    QUESTION_ID INT NOT NULL AUTO_INCREMENT, 
    QUESTION_NAME VARCHAR(100) NOT NULL, 
    ANSWER INT NOT NULL, 

    PRIMARY KEY (QUESTION_ID), 
    FOREIGN KEY (ANSWER) REFERENCES OPTION(OPTION_ID) 
); 

CREATE TABLE OPTION (
    OPTION_ID INT NOT NULL AUTO_INCREMENT, 
    OPTION_NAME VARCHAR(100) NOT NULL, 
    QUESTION INT NOT NULL, 

    PRIMARY KEY (OPTION_ID), 
    FOREIGN KEY (QUESTION) REFERENCES QUESTION(QUESTION_ID) 
); 

다른 오류 # 1064 질문을 확인했지만 도움이되지 않습니다.

이 오류가 발생하는 이유에 대한 의견이 있으십니까?

답변

2

스크립트에 순환 종속성이 있습니다. QUESTION은 OPTION을 참조하고 그 반대의 경우도 마찬가지입니다.

CREATE TABLE QUESTION (
    [...] 
    FOREIGN KEY (ANSWER) REFERENCES OPTION(OPTION_ID) 
); 

CREATE TABLE OPTION (
    [...] 
    FOREIGN KEY (QUESTION) REFERENCES QUESTION(QUESTION_ID) 
); 

어느 당신이 그들을 (순환 종속성이 종종 결함을 설계하는) 제거하거나 질문에 나중에 외부 키를 추가하려고 :

또한
CREATE DATABASE MAWARID; 
USE MAWARID; 

CREATE TABLE TOPIC (
    TOPIC_ID INT NOT NULL AUTO_INCREMENT, 
    TOPIC_NAME VARCHAR(30) NOT NULL, 
    PRIMARY KEY (TOPIC_ID) 
); 

CREATE TABLE QUESTION (
    QUESTION_ID INT NOT NULL AUTO_INCREMENT, 
    QUESTION_NAME VARCHAR(100) NOT NULL, 
    ANSWER INT NOT NULL, 
    PRIMARY KEY (QUESTION_ID) 
    -- no foreign key creation here 
); 

CREATE TABLE `OPTION` (
    OPTION_ID INT NOT NULL AUTO_INCREMENT, 
    OPTION_NAME VARCHAR(100) NOT NULL, 
    QUESTION INT NOT NULL, 

    PRIMARY KEY (OPTION_ID), 
    FOREIGN KEY (QUESTION) REFERENCES QUESTION(QUESTION_ID) 
); 

-- create your foreign key here 
ALTER TABLE QUESTION ADD FOREIGN KEY (ANSWER) REFERENCES `OPTION`(OPTION_ID); 

이 옵션은 예약 된 단어입니다, 당신은 더 나은 둘러싸 것 그것은 백팁으로 또는 다른 이름을 선택하십시오.

2

OPTION은 MySQL의 예약어입니다.

당신은 당신의

CREATE TABLE OPTION 

CREATE TABLE `OPTION` 

참고 변경, 역 따옴표의`의`를 추가해야합니다 역음`키 키보드 미국에 물결표 ~ 키와 같은 버튼에있다.