web-dev-qa-db-fra.com

Erreur MySQL 1064 lors de l'ajout d'une clé étrangère avec MySQL Workbench

J'ai donc une erreur lorsque je veux ajouter une clé étrangère. J'ai ajouté la clé étrangère dans MySQL Workbench avec un modèle de diagramme EER. Les lignes que le plan de travail tente d'ajouter sont: `

CREATE SCHEMA IF NOT EXISTS `barberDB` DEFAULT CHARACTER SET latin1 ;
USE `barberDB` ;

-- -----------------------------------------------------
-- Table `barberDB`.`BARBER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `barberDB`.`BARBER` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `barberDB`.`CUSTOMER`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `barberDB`.`CUSTOMER` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `isHaircut` INT NULL,
  `isBeard` INT NULL,
  `isEyebrows` INT NULL,
  `BARBER_ID` INT NOT NULL,
  PRIMARY KEY (`ID`),
  INDEX `fk_CUSTOMER_BARBER_idx` (`BARBER_ID` ASC) VISIBLE,
  CONSTRAINT `fk_CUSTOMER_BARBER`
    FOREIGN KEY (`BARBER_ID`)
    REFERENCES `barberDB`.`BARBER` (`ID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;


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

L'erreur que j'obtiens est:

ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VISIBLE,
  CONSTRAINT `fk_CUSTOMER_BARBER`
    FOREIGN KEY (`BARBER_ID`)
    REF' at line 12
SQL Code:
        -- -----------------------------------------------------
        -- Table `barberDB`.`CUSTOMER`
        -- -----------------------------------------------------
        CREATE TABLE IF NOT EXISTS `barberDB`.`CUSTOMER` (
          `ID` INT NOT NULL AUTO_INCREMENT,
          `name` VARCHAR(45) NULL,
          `isHaircut` INT NULL,
          `isBeard` INT NULL,
          `isEyebrows` INT NULL,
          `BARBER_ID` INT NOT NULL,
          PRIMARY KEY (`ID`),
          INDEX `fk_CUSTOMER_BARBER_idx` (`BARBER_ID` ASC) VISIBLE,
          CONSTRAINT `fk_CUSTOMER_BARBER`
            FOREIGN KEY (`BARBER_ID`)
            REFERENCES `barberDB`.`BARBER` (`ID`)
            ON DELETE CASCADE
            ON UPDATE CASCADE)
        ENGINE = InnoDB

SQL script execution finished: statements: 6 succeeded, 1 failed

Fetching back view definitions in final form.
Nothing to fetch

J'ai cherché des solutions et je trouve que les parenthèses sont importantes ou des astuces, mais comme le code est créé par l'outil, il me semble correct. Qu'est-ce qui pourrait provoquer l'erreur?

7
NECben067

Pour tous ceux qui le recherchent, dans la fenêtre Modèle de diagramme EER, vous pouvez définir la version de MySQL que vous souhaitez utiliser pour générer un script SQL. Allez dans Edition, Préférences, puis section Modélisation, MySQL et définissez votre version MySQL personnalisée.

18
imnothuman

Dans MySQL Workbench, lorsque vous êtes connecté à un serveur, cliquez sur "Serveur" dans le menu principal puis sur "État du serveur".

Avec "Version: X.X" allez dans votre balise Diagramme EER, cliquez sur "Modifier" dans le menu principal et "préférences", puis dans la section Modélisation "MySQL" définissez votre version MySQL personnalisée prise auparavant.

3
GonSnow

Vérifiez votre version de MySQL et mettez-la à jour dans:

Préférences -> Modélisation -> MySQL -> Version cible MySQL par défaut

Ma version MySQL est 5.7.21.

3
satheesh m

Merci @imnothuman

Dans MacOS version MySQL Workbench, vous pouvez définir la version du script MySQL ici:

Depuis le diagramme EER ouvert:
Modèle -> Options du modèle.
Onglet MySQL.
Décochez "Utiliser les valeurs par défaut des paramètres globaux".
Définissez la version dans l'entrée "Version MySQL cible".

1
nanocv

j'utilisais la version 5.5.62 de mysql.

commenter la ligne INDEX 'fk_CUSTOMER_BARBER_idx' ('BARBER_ID' ASC) VISIBLE, a fonctionné pour moi.

0
dinith jayabodhi