MYSQL错误1064:似乎无法准确找到错误

时间:2015-10-31 12:41:21

标签: mysql sql syntax-error mysql-error-1064

您好我是一般的SQL和编码新手,我在代码中看到错误,我似乎无法弄明白。

DROP TABLE IF EXISTS record, artist;

CREATE TABLE artist (
    id INT AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    PRIMARY KEY (id)
);

CREATE TABLE record (
    id INT AUTO_INCREMENT,
    title VARCHAR(50),
    artist_id INT,
    genre TINYTEXT,
    year YEAR(4),
    price DECIMAL(10, 2) unsigned,
    PRIMARY KEY (id),
    FOREIGN KEY (artist_id)
            REFERENCES artist (id)
);

CREATE TABLE order (
    id INT AUTO_INCREMENT,
    record_id INT,
    quantity INT unsigned,
    total DECIMAL(10, 2) unsigned,
    PRIMARY KEY (id),
    FOREIGN KEY (record_id)
            REFERENCES record (id)
);

显示的错误是:
错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用(' order)     id INT AUTO_INCREMENT,     record_id INT,     数量INT未签名,     总D'在第1行

我知道它告诉我错误的确切位置,并且我知道这是一个语法错误,但由于某种原因,我似乎无法理解错误的确切位置或内容。我尝试过添加“订购”功能。使用DROP TABLE IF EXISTS,但只会出现更多错误。我知道这可能是非常明显的事情,所以我很抱歉,但我很失落。

1 个答案:

答案 0 :(得分:1)

order是SQL中的保留字。您可以通过使用前向引号将其保护来保护它:

CREATE TABLE `order` (
    id INT AUTO_INCREMENT,
    record_id INT,
    quantity INT unsigned,
    total DECIMAL(10, 2) unsigned,
    PRIMARY KEY (id),
    FOREIGN KEY (record_id)
            REFERENCES record (id)
);

或更好的是,只需找到一个不是保留字的名称,例如orders

CREATE TABLE orders (
    id INT AUTO_INCREMENT,
    record_id INT,
    quantity INT unsigned,
    total DECIMAL(10, 2) unsigned,
    PRIMARY KEY (id),
    FOREIGN KEY (record_id)
            REFERENCES record (id)
);