【问题标题】:MYSQL Error 1064: Can't seem to find the error exactly [duplicate]MYSQL 错误 1064:似乎无法准确找到错误 [重复]
【发布时间】:2015-10-31 12:41:20
【问题描述】:

您好,我是一般的 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)
);

出现的错误是:
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'order ( id INT AUTO_INCREMENT, record_id INT, 数量 INT 无符号, 第 1 行的总 D'

我知道它准确地告诉我错误在哪里,而且我知道这是一个语法错误,但由于某种原因,我似乎无法理解错误的确切位置或内容。我尝试使用DROP TABLE IF EXISTS 添加“订单”,但这只会带来更多错误。我知道这可能是非常明显的事情,所以我很抱歉问,但我很迷茫。

【问题讨论】:

  • ORDER 在 SQL 中是关键字,在 MySQL 中是保留字。将其命名为其他名称。
  • @GordonLinoff 谢谢 :)

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


【解决方案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)
);

【讨论】:

  • 谢谢你解决了我的问题
猜你喜欢
  • 2019-11-29
  • 1970-01-01
  • 2021-02-27
  • 2019-05-05
  • 2012-03-29
相关资源
最近更新 更多