Как создать таблицу 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, чтобы узнать правильный синтаксис для использования рядом с '


person Community    schedule 02.11.2020    source источник
comment
код в порядке, проблема в другом месте   -  person nbk    schedule 02.11.2020
comment
Mariadb не поддерживает видимые/невидимые индексы   -  person P.Salmon    schedule 02.11.2020
comment
Отвечает ли это на ваш вопрос? Синтаксис ошибки MySQL 1064, но все выглядит нормально   -  person P.Salmon    schedule 02.11.2020
comment
Код SQL работает на MySQL 8.0 sqlize.online/   -  person Slava Rozhnev    schedule 02.11.2020


Ответы (2)


Вы используете MariaDB, а не MySQL, как указано в сообщении об ошибке. В отличие от MySQL, которая добавила эту функцию в версии 8.0, MariaDB просто не поддерживает невидимые индексы. Вам нужно удалить это ключевое слово.

Я бы также сказал, что ASC — это направление сортировки по умолчанию для индексов, так что это ключевое слово на самом деле излишне.

So:

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);

Объявление ограничений внешнего ключа выглядит нормально (пока родительские столбцы существуют, индексируются и имеют соответствующий тип данных, чего нельзя сказать из предоставленной вами информации).

person GMB    schedule 02.11.2020

Проблема с синтаксисом - это ключевое слово INVISIBLE и VISIBLE в индексе, удалите их, и все заработает.

person Holzer    schedule 02.11.2020