Problema al generar script sql, ERROR: Error 1064: You have an error in your SQL syntax;

publicado por: Anonymous

estoy generando el script sql de mi db en Forward Engineer, pero me está saliendo un ERROR: Error 1064: You have an error in your SQL syntax; y no sé por qué exactamente y esto no permite que se me creen todas las tablas que tengo. Me he dado cuenta que al estar creando llaves foraneas, me empieza a salir éste error.

Message Log

Executing SQL script in server ERROR: Error 1064: You have an error in
your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near ‘ CONSTRAINT
fk_Usuario_TipoDocumento1
FOREIGN KEY (`TipoDocumento_idTipo’ at line 19

SQL Code:

-- -----------------------------------------------------
-- Table `toderos2`.`Usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `toderos2`.`Usuario` (
  `idUsuario` INT NOT NULL AUTO_INCREMENT,
  `Nombre` VARCHAR(45) NULL,
  `Apellido` VARCHAR(45) NULL,
  `Documento` VARCHAR(45) NULL,
  `FechaNacimiento` DATE NULL,
  `Email` VARCHAR(100) NULL,
  `Password` VARCHAR(45) NULL,
  `EstadoUsuario` VARCHAR(1) NULL,
  `Direccion` VARCHAR(100) NULL,
  `Barrio` VARCHAR(100) NULL,
  `Ciudad` VARCHAR(100) NULL,
  `Departamento` VARCHAR(100) NULL,
  `TipoDocumento_idTipoDocumento` INT NOT NULL,
  PRIMARY KEY (`idUsuario`),
  INDEX `fk_Usuario_TipoDocumento1_idx` (`TipoDocumento_idTipoDocumento` ASC) VISIBLE,
  CONSTRAINT `fk_Usuario_TipoDocumento1`
    FOREIGN KEY (`TipoDocumento_idTipoDocumento`)
    REFERENCES `toderos2`.`TipoDocumento` (`idTipoDocumento`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

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

Fetching back view definitions in final form. Nothing to fetch
Executing SQL script in server ERROR: Error 1064: You have an error in
your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near ‘ CONSTRAINT
fk_Usuario_TipoDocumento1
FOREIGN KEY (`TipoDocumento_idTipo’ at line 19

SQL Code:

-- -----------------------------------------------------
-- Table `toderos2`.`Usuario`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `toderos2`.`Usuario` (
  `idUsuario` INT NOT NULL AUTO_INCREMENT,
  `Nombre` VARCHAR(45) NULL,
  `Apellido` VARCHAR(45) NULL,
  `Documento` VARCHAR(45) NULL,
  `FechaNacimiento` DATE NULL,
  `Email` VARCHAR(100) NULL,
  `Password` VARCHAR(45) NULL,
  `EstadoUsuario` VARCHAR(1) NULL,
  `Direccion` VARCHAR(100) NULL,
  `Barrio` VARCHAR(100) NULL,
  `Ciudad` VARCHAR(100) NULL,
  `Departamento` VARCHAR(100) NULL,
  `TipoDocumento_idTipoDocumento` INT NOT NULL,
  PRIMARY KEY (`idUsuario`),
  INDEX `fk_Usuario_TipoDocumento1_idx` (`TipoDocumento_idTipoDocumento` ASC) VISIBLE,
  CONSTRAINT `fk_Usuario_TipoDocumento1`
    FOREIGN KEY (`TipoDocumento_idTipoDocumento`)
    REFERENCES `toderos2`.`TipoDocumento` (`idTipoDocumento`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

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

Fetching back view definitions in final form. Nothing to fetch

solución

El Error 1064 en este caso es causado por la palabra VISIBLE en partes como esta del CREATE TABLE:

  INDEX `fk_Usuario_TipoDocumento1_idx` (`TipoDocumento_idTipoDocumento` ASC) VISIBLE ...

Este error fue reportado (aunque no reconocido) como un bug en septiembre de 2018 :

… cuando utilizo el asistente de transferencia de esquema de la base
de datos, siempre obtengo errores porque en la nueva versión de
Workbench se agregó la palabra clave “VISIBLE”. Cómo evitar que esto
suceda:

El error suele ocurrir cuando se usa el asistente de transferencia de esquema, debido a que las versiones de Workbench superiores a v. 8 agregan por defecto en el caso de los índices la palabra clave VISIBLE y esto debido a que a partir de la versión 8 de MySQL puede haber índices invisibles. Para hacer la diferencia el generador de CREATE TABLE añade ahora por tanto la palabra clave VISIBLE por defecto.

El problema es que si intentas ejecutar el CREATE TABLE así generado en una versión de MySQL inferior a v. 8 el código terminará en un error de sintaxis, porque la palabra clave VISIBLE (tampoco INVISIBLE), son reconocidas por dichas versiones.

Soluciones:

(a). Actualizar todo a la versión 8 o superior (recomendado)

O bien:

(b). Quitar, donde quiera que aparezca, la palabra clave VISIBLE (o INVISIBLE si se diera un muy poco probalbe caso), y ejecutar de nuevo la sentencia

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *