0

我正在尝试创建一个数据库,我已经编写了代码,当我将它导入到 phpMyAdmin 时,我收到以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION(OPTION_ID)
)' at line 7

和我写的代码:

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 问题,但似乎没有帮助我。

关于我为什么会收到此错误的任何想法?

4

2 回答 2

2

OPTION是 MySQL 中的保留字。

你需要添加反引号``,改变你的

CREATE TABLE OPTION

CREATE TABLE `OPTION`

注意:~反引号 ` 键与美国键盘上的波浪号键位于同一按钮上。

于 2013-06-09T06:52:24.423 回答
2

您的脚本中存在循环依赖关系:QUESTION 引用 OPTION,反之亦然。

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

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

要么删除它们(循环依赖通常是设计缺陷),要么稍后尝试在 QUESTION 中添加外键:

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

另外,OPTION 是一个保留字,你最好将它附在backtips 中或者选择其他名称。

于 2013-06-09T07:03:46.750 回答