SQL Script не может создать несколько таблиц - PullRequest
0 голосов
/ 01 января 2019

Мой SQL-скрипт сначала говорит, что он не подключен, когда я его открываю, поэтому я подключаю его, перейдя в Query -> Reconnect to server, который работает.Затем я пытаюсь выполнить сценарий SQL, который создает только первые две таблицы, встречаются с кодом ошибки 1064, и ошибки находятся в строках индекса VISIBLE.Я понятия не имею, что это значит, так как я совершенно новичок в SQL, кто-нибудь может помочь?

Код ошибки: 1064. У вас ошибка в синтаксисе SQL;обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования возле 'INDEX userId_idx (userId ASC) VISIBLE, CONSTRAINT gameId FOREIGN' в строке 9

- MySQL Script, сгенерированный MySQL Workbench- ср. 2 января 02:21:44 2019 - Модель: новая версия модели: 1.0 - MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema game_review
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema game_review
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `game_review` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
USE `game_review` ;

-- -----------------------------------------------------
-- Table `game_review`.`games`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `game_review`.`games` (
  `game_Id` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `tags` VARCHAR(60) NOT NULL,
  `systemReq` VARCHAR(255) NOT NULL,
  `developer` VARCHAR(45) NOT NULL,
  `publisher` VARCHAR(45) NOT NULL,
  `trailer` VARCHAR(45) NULL,
  `about` VARCHAR(255) NULL,
  `platform` VARCHAR(45) NOT NULL,
  `categories` VARCHAR(45) NOT NULL,
  `description` VARCHAR(45) NOT NULL,
  `releaseDate` DATETIME NOT NULL,
  PRIMARY KEY (`game_Id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `game_review`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `game_review`.`users` (
  `user_Id` INT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  `email` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`user_Id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `game_review`.`reviews`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `game_review`.`reviews` (
  `review_Id` INT NOT NULL AUTO_INCREMENT,
  `gameId` INT NOT NULL,
  `userId` INT NOT NULL,
  `review` TEXT(1024) NOT NULL,
  `rating` INT NULL,
  `dateposted` DATETIME NULL,
  PRIMARY KEY (`review_Id`),
  INDEX `gameId_idx` (`gameId` ASC) VISIBLE,
  INDEX `userId_idx` (`userId` ASC) VISIBLE,
  CONSTRAINT `gameId`
    FOREIGN KEY (`gameId`)
    REFERENCES `game_review`.`games` (`game_Id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `userId`
    FOREIGN KEY (`userId`)
    REFERENCES `game_review`.`users` (`user_Id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `game_review`.`favourites`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `game_review`.`favourites` (
  `favourites_Id` INT NOT NULL AUTO_INCREMENT,
  `gameId` INT NOT NULL,
  `userId` INT NOT NULL,
  PRIMARY KEY (`favourites_Id`),
  INDEX `gameId_idx` (`gameId` ASC) VISIBLE,
  INDEX `userId_idx` (`userId` ASC) VISIBLE,
  CONSTRAINT `gameId`
    FOREIGN KEY (`gameId`)
    REFERENCES `game_review`.`games` (`game_Id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `userId`
    FOREIGN KEY (`userId`)
    REFERENCES `game_review`.`users` (`user_Id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `game_review`.`forum`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `game_review`.`forum` (
  `forum_Id` INT NOT NULL AUTO_INCREMENT,
  `gameId` INT NOT NULL,
  `userId` INT NOT NULL,
  `topic` VARCHAR(45) NOT NULL,
  `views` INT NOT NULL,
  `likes` INT NOT NULL,
  `comment` TEXT(300) NULL,
  `totalComments` INT NULL,
  `dateposted` DATETIME NOT NULL,
  PRIMARY KEY (`forum_Id`),
  INDEX `gameId_idx` (`gameId` ASC) VISIBLE,
  INDEX `userId_idx` (`userId` ASC) VISIBLE,
  CONSTRAINT `gameId`
    FOREIGN KEY (`gameId`)
    REFERENCES `game_review`.`games` (`game_Id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `userId`
    FOREIGN KEY (`userId`)
    REFERENCES `game_review`.`users` (`user_Id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `game_review`.`game cart`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `game_review`.`game cart` (
  `cart_Id` INT NOT NULL AUTO_INCREMENT,
  `gameId` INT NOT NULL,
  `quantity` INT NULL,
  PRIMARY KEY (`cart_Id`),
  INDEX `gameId_idx` (`gameId` ASC) VISIBLE,
  CONSTRAINT `gameId`
    FOREIGN KEY (`gameId`)
    REFERENCES `game_review`.`games` (`game_Id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

1 Ответ

0 голосов
/ 01 января 2019

Ваше объявление индексов неверно: VISIBLE - не распознанный синтаксис.Кроме того, упоминание ASC является излишним, поскольку оно соответствует значению по умолчанию.

Заменить:

...
INDEX `gameId_idx` (`gameId` ASC) VISIBLE,
INDEX `userId_idx` (`userId` ASC) VISIBLE,
...

На:

...
INDEX `reviews_gameId_idx` (`gameId`),
INDEX `reviews_userId_idx` (`userId`),
...

Для получения дополнительной информации см. mysql CREATE INDEX docs .

Также имейте в виду, что в большинстве СУБД, отличных от mysql, имена индексов являются глобальными для всей схемы базы данных, поэтому убедитесь, что одно и то же имя индекса не используется дважды (видно, что по крайней мере индекс gameId_idx объявляется дважды. Одним из решений является добавление префикса имени индекса к таблице, к которой он принадлежит, как показано выше.

Имена внешних ключей между различными таблицами также должны быть уникальными (выесть дубликаты, такие как game_Id).

Наконец, я также замечаю, что в имени одной из ваших таблиц есть пробел (game cart): это не очень хорошая практика, ее следует избегать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...