sql >> Databasteknik >  >> RDS >> Mysql

MySQL Workbench:Fel i fråga (1064):Syntaxfel nära "VISIBLE" på rad 1

Problemet här är skillnaden i syntax mellan olika MySQL-serverversioner. Det verkar som om MySQL Workbench 8.0.12 genererar automatiskt CREATE UNIQUE INDEX uttalande för MySQL-servern version 8.0 .

Från MySQL Server 8.0 Docs , syntaxen för CREATE INDEX är:

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}

Men det här alternativet {VISIBLE | INVISIBLE} är inte tillgänglig i MySQL Server 5.7 . Från Dokument :

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}

Om du inte vill uppgradera till senaste versionen av MySQL; du kan inaktivera den här funktionen för automatisk generering med VISIBLE / INVISIBLE index:

I MySQL Workbench:

Gå till:

Redigera> Inställningar> Modellering> MySQL.

Ställ sedan in "Default Target MySQL Version" till 5.7

Kontrollera skärmdumpen nedan:



  1. MariaDB SQL Set Operators

  2. Spring, Hibernate, Blob lat lastning

  3. PostgreSQL-kolumnen 'foo' finns inte

  4. Grunderna för tabelluttryck, del 1