我试图在我的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
答案 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'