#1064 - 您的SQL语法有错误;检查与MariaDB服务器对应的手册

时间:2017-02-12 08:27:17

标签: sql mariadb

我试图在我的sql服务器上运行以下查询:

CREATE TABLE `e_store`.`products`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(250) NOT NULL ,
    `brand_id` INT UNSIGNED NOT NULL ,
    `category_id` INT UNSIGNED NOT NULL ,
    `attributes` JSON NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`(`category_id` ASC) ,
    INDEX `BRAND_ID`(`brand_id` ASC) ,
    CONSTRAINT `brand_id` FOREIGN KEY(`brand_id`) REFERENCES `e_store`.`brands`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE ,
    CONSTRAINT `category_id` FOREIGN KEY(`category_id`) REFERENCES `e_store`.`categories`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
);

我的e_store数据库上已有品牌和类别表。

但我收到以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'JSON NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`('category_id' ' at line 6

4 个答案:

答案 0 :(得分:2)

在服务器中解析“JSON”。 JSON是分歧点之一。

MySQL 5.7引入了JSON数据类型,它符合您的语法。

MariaDB 10.0.16引入了ENGINE=CONNECT table_type=JSON,它与您尝试的语法不符。

答案 1 :(得分:1)

您在索引定义中使用单引号而不是反引号

试试这个:

CREATE TABLE `e_store`.`products`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR(250) NOT NULL ,
    `brand_id` INT UNSIGNED NOT NULL ,
    `category_id` INT UNSIGNED NOT NULL ,
    `attributes` JSON NOT NULL ,
    PRIMARY KEY(`id`) ,
    INDEX `CATEGORY_ID`(`category_id` ASC) ,  -- Changed single quotes to backticks
    INDEX `BRAND_ID`(`brand_id` ASC) ,   -- Changed single quotes to backticks
    CONSTRAINT `brand_id` FOREIGN KEY(`brand_id`) REFERENCES `e_store`.`brands`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE ,
    CONSTRAINT `category_id` FOREIGN KEY(`category_id`) REFERENCES `e_store`.`categories`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
);

答案 2 :(得分:1)

对于那些面临与我相似的问题的人:

MariaDB本身并不实现JSON数据类型,但出于兼容性原因,它将其用作LONGTEXT的别名。根据文档(https://mariadb.com/kb/en/library/json-data-type/):

  

JSON是LONGTEXT的别名,出于与MySQL JSON数据类型的兼容性原因而引入。 MariaDB将其实现为LONGTEXT,因为JSON数据类型与SQL标准相矛盾,并且MariaDB的基准测试表明性能至少相当。

     

为了确保插入有效的json文档,可以将JSON_VALID函数用作CHECK约束。

因此,如果您在MariaDB中遇到JSON数据类型的问题,只需使用LONGTEXT;-)

答案 3 :(得分:0)

我认为您收到JSON数据类型的错误。

对于Mysql 5.7,您可以从以下链接获得帮助。

https://dev.mysql.com/doc/refman/5.7/en/json.html

您可以使用以下查询检查vesrion。

select version() as 'mysql version'