【问题标题】:How do I create a mysql table with foreign keys?如何使用外键创建 mysql 表?
【发布时间】:2021-02-14 23:36:29
【问题描述】:

我只是想用两个外键创建一个表。另外两个表,users和puzzles,已经有了主键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 服务器版本相对应的手册,以了解在 ' 附近使用的正确语法”

【问题讨论】:

标签: sql foreign-keys mariadb create-table


【解决方案1】:

如错误消息所示,您正在运行 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);

外键约束的声明看起来不错(只要父列存在、已编入索引并具有匹配的数据类型 - 从您提供的信息中无法得知)。

【讨论】:

    【解决方案2】:

    语法问题是索引中的关键字INVISIBLE和VISIBLE,去掉它们就可以了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多