微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用外键创建mysql表?

如何解决如何使用外键创建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 举报,一经查实,本站将立刻删除。