web-dev-qa-db-fra.com

MySQL Workbench: Erreur dans la requête (1064): Erreur de syntaxe près de «VISIBLE» à la ligne 1

Des idées pourquoi VISIBLE ci-dessous est à l'origine d'un problème?

CREATE TABLE IF NOT EXISTS `setting` (
  `uuid` INT(10) NOT NULL,
  `type` VARCHAR(255) NOT NULL,
  `code` VARCHAR(255) NOT NULL COMMENT 'An unique name.',
  `value` MEDIUMTEXT NULL DEFAULT NULL,
  `comment` LONGTEXT NULL DEFAULT NULL,
  `created_on` INT UNSIGNED NOT NULL,
  `updated_on` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`uuid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE UNIQUE INDEX `name_UNIQUE` ON `setting` (`code` ASC) VISIBLE;

CREATE UNIQUE INDEX `uuid_UNIQUE` ON `setting` (`uuid` ASC) VISIBLE;

Les erreurs:

CRÉER UN INDEX UNIQUE name_UNIQUE ON setting (code ASC) VISIBLE Erreur dans la requête (1064): erreur de syntaxe près de 'VISIBLE' à la ligne 1

CRÉER UN INDEX UNIQUE uuid_UNIQUE ON setting (uuid ASC) VISIBLE Erreur dans la requête (1064): erreur de syntaxe près de 'VISIBLE' à la ligne 1

Aucune erreur si je supprime VISIBLE mais MySQL Workbench 8.0.12 génère automatiquement cela. Comment puis-je empêcher MySQL Workbench de faire cela?

Mes informations MySQL dans mon Ubuntu 18.04:

Version MySQL: 5.7.23-0ubuntu0.18.04.1 à PHP extension MySQLi

9
laukok

Le problème ici est la différence de syntaxe entre les différentes versions de serveur MySQL. Il semble que MySQL Workbench 8.0.12 se génère automatiquement CREATE UNIQUE INDEX instruction pour le serveur MySQL version 8.0 .

Dans MySQL Server 8.0 Docs , la syntaxe pour CREATE INDEX est:

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}  /* Notice the option of VISIBLE / INVISIBLE */

index_type:
  USING {BTREE | HASH}

Cependant, cette option de {VISIBLE | INVISIBLE} n'est pas disponible dans MySQL Server 5.7 . De Docs :

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part:
    col_name [(length)] [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'   /* No option of VISIBLE / INVISIBLE */

index_type:
    USING {BTREE | HASH}

Si vous ne cherchez pas à mettre à niveau vers la dernière version de MySQL; vous pouvez désactiver cette fonction de génération automatique avec VISIBLE / INVISIBLE index:

Dans MySQL Workbench:

Aller à:

Édition> Préférences> Modélisation> MySQL.

Ensuite, définissez la "Version cible MySQL par défaut" sur 5.7

Vérifiez la capture d'écran ci-dessous:

MySQL WorkBench Modeling

21
Madhur Bhaiya

dans Workbench: Modèle> Options du modèle ...> MySQL => décocher "Utiliser les valeurs par défaut des paramètres globaux

1
Rickobotics

Version alternative à 5.7 ou 6.3. J'ai utilisé 6.3. Sur Modèle> Options du modèle ..> MySql> 6.3

1
Eduardo Tolentino