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?
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.
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.
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.
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".
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.