问题描述
我只是试图用两个外键创建一个表。其他两个表(用户和拼图)已经具有主键user_id和puzzle_id
CREATE TABLE `bglascoc_puzzle_db`.`comments` (
`comment_id` INT NOT NULL,`comment` VARCHAR(144) NULL,`user_id` INT NOT NULL,`puzzle_id` INT NOT NULL,PRIMARY KEY (`comment_id`),INDEX `user_id` (`user_id` ASC) INVISIBLE,INDEX `puzzle_id` (`puzzle_id` ASC) VISIBLE,CONSTRAINT `user_id`
FOREIGN KEY (`user_id`)
REFERENCES `bglascoc_puzzle_db`.`users` (`user_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,CONSTRAINT `puzzle_id`
FOREIGN KEY (`puzzle_id`)
REFERENCES `bglascoc_puzzle_db`.`puzzles` (`puzzle_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
但是,我收到错误消息“您的sql语法有误;请查看与您的MariaDB服务器版本相对应的手册,以找到在'''附近使用的正确语法
解决方法
您正在运行MariaDB,而不是MySQL,如错误消息所示。与MySQL在8.0版中添加了此功能不同,MariaDB仅不支持不可见索引。您需要删除该关键字。
我还认为ASC
是索引的默认排序方向,因此该关键字实际上是多余的。
所以:
CREATE TABLE `bglascoc_puzzle_db`.`comments` (
`comment_id` INT NOT NULL,`comment` VARCHAR(144) NULL,`user_id` INT NOT NULL,`puzzle_id` INT NOT NULL,PRIMARY KEY (`comment_id`),INDEX `user_id` (`user_id`),INDEX `puzzle_id` (`puzzle_id`),CONSTRAINT `user_id`
FOREIGN KEY (`user_id`)
REFERENCES `bglascoc_puzzle_db`.`users` (`user_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,CONSTRAINT `puzzle_id`
FOREIGN KEY (`puzzle_id`)
REFERENCES `bglascoc_puzzle_db`.`puzzles` (`puzzle_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
外键约束的声明看起来不错(只要父列存在,已建立索引并且具有匹配的数据类型-无法从您提供的信息中得知)。
,语法问题是索引中的关键字INVISIBLE和VISIBLE,将它们删除即可使用