如何解决如何使用外键创建mysql表?
我只是试图用两个外键创建一个表。其他两个表(用户和拼图)已经具有主键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,将它们删除即可使用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。