Buscar..


Código de error 1064: error de sintaxis

select LastName, FirstName,
from Person

Devuelve el mensaje:

Código de error: 1064. Usted tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de "de Persona" en la línea 2.

Obtener un mensaje de "error 1064" de MySQL significa que la consulta no se puede analizar sin errores de sintaxis. En otras palabras, no puede dar sentido a la consulta.

La cita en el mensaje de error comienza con el primer carácter de la consulta que MySQL no puede averiguar cómo analizar. En este ejemplo, MySQL no puede tener sentido, en contexto, de parte from Person . En este caso, hay una coma adicional inmediatamente anterior from Person . La coma le dice a MySQL que espere otra descripción de columna en la cláusula SELECT

Un error de sintaxis siempre dice ... near '...' . La cosa al comienzo de las citas está muy cerca de donde está el error. Para localizar un error, mire el primer token en las comillas y el último token antes de las comillas.

A veces te pondrás ... near '' ; Es decir, nada en las citas. Eso significa que el primer carácter que MySQL no puede entender es justo al final o al principio de la declaración. Esto sugiere que la consulta contiene comillas no balanceadas ( ' o " ) o paréntesis no balanceados o que no terminó la declaración correctamente antes.

En el caso de una rutina almacenada, es posible que haya olvidado usar DELIMITER correctamente.

Entonces, cuando obtenga el Error 1064, mire el texto de la consulta y encuentre el punto mencionado en el mensaje de error. Inspeccione visualmente el texto de la consulta alrededor de ese punto.

Si le pide a alguien que lo ayude a solucionar el error 1064, es mejor proporcionar tanto el texto de toda la consulta como el texto del mensaje de error.

Código de error 1175: Actualización segura

Este error aparece al intentar actualizar o eliminar registros sin incluir la cláusula WHERE que utiliza la columna KEY .

Para ejecutar la eliminación o actualización de todos modos - escriba:

SET SQL_SAFE_UPDATES = 0;

Para volver a habilitar el modo seguro, escriba:

SET SQL_SAFE_UPDATES = 1;

Código de error 1215: No se puede agregar una restricción de clave externa

Este error se produce cuando las tablas no están estructuradas adecuadamente para manejar la verificación rápida de los requisitos de clave externa ( FK ) que el desarrollador exige.

CREATE TABLE `gtType` (
  `type` char(2) NOT NULL,
  `description` varchar(1000) NOT NULL,
  PRIMARY KEY (`type`)
) ENGINE=InnoDB;

CREATE TABLE `getTogethers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` char(2) NOT NULL,
  `eventDT` datetime NOT NULL,
  `location` varchar(1000) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_gt2type` (`type`), -- see Note1 below 
  CONSTRAINT `gettogethers_ibfk_1` FOREIGN KEY (`type`) REFERENCES `gtType` (`type`)
) ENGINE=InnoDB;

Nota 1: una clave como esta se creará automáticamente si es necesario debido a la definición de FK en la línea que la sigue. El desarrollador puede omitirlo, y se agregará la CLAVE (también conocido como índice) si es necesario. Un ejemplo de lo que fue omitido por el desarrollador se muestra a continuación en someOther .

Hasta aquí todo bien, hasta la llamada de abajo.

CREATE TABLE `someOther` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `someDT` datetime NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `someOther_dt` FOREIGN KEY (`someDT`) REFERENCES `getTogethers` (`eventDT`)
) ENGINE=InnoDB;

Código de error: 1215. No se puede agregar una restricción de clave externa

En este caso, falla debido a la falta de un índice en la tabla referenciada getTogethers para manejar la búsqueda rápida de un eventDT . Para ser resuelto en la siguiente afirmación.

CREATE INDEX `gt_eventdt` ON getTogethers (`eventDT`);

La tabla getTogethers ha sido modificada, y ahora la creación de someOther tendrá éxito.

De la página del manual de MySQL usando restricciones de FOREIGN KEY :

MySQL requiere índices en claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de tablas. En la tabla de referencia, debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden. Dicho índice se crea automáticamente en la tabla de referencia si no existe.

Las columnas correspondientes en la clave externa y la clave a la que se hace referencia deben tener tipos de datos similares. El tamaño y el signo de los tipos enteros deben ser iguales. La longitud de los tipos de cadena no tiene por qué ser la misma. Para las columnas de cadena no binaria (carácter), el conjunto de caracteres y la intercalación deben ser los mismos.

InnoDB permite que una clave externa haga referencia a cualquier columna de índice o grupo de columnas. Sin embargo, en la tabla a la que se hace referencia, debe haber un índice donde las columnas a las que se hace referencia se enumeran como las primeras columnas en el mismo orden.

Tenga en cuenta que el último punto anterior sobre las primeras columnas (más a la izquierda) y la falta de un requisito de clave principal (aunque altamente recomendado).

Tras la creación exitosa de una tabla de referencia (secundaria), todas las claves que se crearon automáticamente para usted son visibles con un comando como el siguiente:

SHOW CREATE TABLE someOther;

Otros casos comunes de experimentar este error incluyen, como se mencionó anteriormente en los documentos, pero se debe resaltar:

  • Diferencias aparentemente triviales en la INT que están firmadas, apuntando hacia INT UNSIGNED .

  • Los desarrolladores tienen problemas para comprender las LLAVES de varias columnas (compuestas) y los primeros requisitos de pedido (de la izquierda).

1045 Acceso denegado

Ver discusiones en "GRANT" y "Recuperar contraseña de root".

1236 "posición imposible" en la replicación

Por lo general, esto significa que el Maestro se estrelló y que sync_binlog estaba DESACTIVADO. La solución es CHANGE MASTER to POS=0 del siguiente archivo binlog (ver Maestro) en el Esclavo.

La causa: el Maestro envía elementos de replicación al Esclavo antes de descargar a su binlog (cuando sync_binlog=OFF ). Si el maestro se bloquea antes de la descarga, el esclavo ya se ha movido lógicamente más allá del final del archivo en el binlog. Cuando el Maestro se inicia de nuevo, inicia un nuevo binlog, por lo que CAMBIAR al principio de ese binlog es la mejor solución disponible.

Una solución a largo plazo es sync_binlog=ON , si puede pagar la E / S adicional que causa.

(Si está ejecutando con GTID, ...?)

2002, 2003 No se puede conectar

Compruebe si hay un problema con el Firewall bloqueando el puerto 3306.

Algunos posibles diagnósticos y / o soluciones.

  • ¿El servidor está funcionando realmente?
  • "Service firewalld stop" y "systemctl disable firewalld"
  • telnet master 3306
  • Compruebe la bind-address
  • compruebe skip-name-resolve
  • compruebe el zócalo.

1067, 1292, 1366, 1411 - Valor incorrecto para el número, la fecha, el valor predeterminado, etc.

1067 Esto probablemente esté relacionado con los valores predeterminados de TIMESTAMP , que han cambiado con el tiempo. Consulte los TIMESTAMP defaults en la página Fechas y horarios. (que aún no existe)

1292/1366 DOBLE / Integer Compruebe si hay letras u otros errores de sintaxis. Compruebe que las columnas se alinean; quizás pienses que estás poniendo en un VARCHAR pero está alineado con una columna numérica.

1292 DATETIME Verifica demasiado lejos en el pasado o el futuro. Verifique entre las 2 y las 3 de la madrugada cuando cambie el horario de verano. Comprueba si hay una sintaxis incorrecta, como +00 cosas de zona horaria.

1292 VARIABLE Verifique los valores permitidos para la VARIABLE que está intentando SET .

1292 DATOS DE LA CARGA Mire la línea que es 'mala'. Compruebe los símbolos de escape, etc. Mire los tipos de datos.

1411 STR_TO_DATE ¿Fecha con formato incorrecto?

126, 127, 134, 144, 145

Cuando intenta acceder a los registros de la base de datos MySQL, puede recibir estos mensajes de error. Estos mensajes de error ocurrieron debido a la corrupción en la base de datos MySQL. Los siguientes son los tipos

MySQL error code 126 = Index file is crashed
MySQL error code 127 = Record-file is crashed
MySQL error code 134 = Record was already deleted (or record file crashed)
MySQL error code 144 = Table is crashed and last repair failed
MySQL error code 145 = Table was marked as crashed and should be repaired

El error de MySQL, el ataque de virus, la falla del servidor, el apagado incorrecto, la tabla dañada son la razón detrás de esta corrupción. Cuando se corrompe, se vuelve inaccesible y ya no se puede acceder a ellos. Para obtener accesibilidad, la mejor manera de recuperar datos de una copia de seguridad actualizada. Sin embargo, si no tiene una copia de seguridad actualizada o válida, puede ir a la reparación de MySQL.

Si el tipo de motor de la mesa es MyISAM , aplique CHECK TABLE , luego REPAIR TABLE .

Luego piense seriamente en convertir a InnoDB, para que este error no vuelva a ocurrir.

Sintaxis

CHECK TABLE <table name> ////To check the extent of database corruption
REPAIR TABLE <table name> ////To repair table

139

El error 139 puede significar que el número y el tamaño de los campos en la definición de la tabla excede algún límite. Soluciones:

  • Repensar el esquema
  • Normalizar algunos campos.
  • Partición vertical de la tabla

1366

Esto generalmente significa que el manejo del conjunto de caracteres no fue consistente entre el cliente y el servidor. Ver ... para más ayuda.

126, 1054, 1146, 1062, 24

(tomando un descanso) Con la inclusión de esos 4 números de error, creo que esta página habrá cubierto aproximadamente el 50% de los errores típicos que obtienen los usuarios.

(Sí, este 'Ejemplo' necesita revisión.)

24 No se puede abrir el archivo (demasiados archivos abiertos)

open_files_limit proviene de una configuración del sistema operativo. table_open_cache necesita ser menos que eso.

Estos pueden causar ese error:

  • Fallo en DEALLOCATE PREPARE en un procedimiento almacenado.

  • PARTICIÓN de tabla (s) con un gran número de particiones y innodb_file_per_table = ON. Recomienda no tener más de 50 particiones en una tabla dada (por varias razones). (Cuando "Particiones nativas" estén disponibles, este consejo puede cambiar.)

La solución obvia es establecer aumentar el límite SO: Para permitir más archivos, cambiar ulimit o /etc/security/limits.conf o en sysctl.conf (kern.maxfiles y kern.maxfilesperproc) o algo más (depende del sistema operativo). Luego incremente open_files_limit y table_open_cache .

A partir de la versión 5.6.8, open_files_limit es de tamaño automático basado en max_connections , pero está bien cambiarlo del valor predeterminado.

1062 - Entrada duplicada

Este error ocurre principalmente debido a las siguientes dos razones

  1. Valor duplicado - Error Code: 1062. Duplicate entry '12' for key 'PRIMARY'

    La columna de clave principal es única y no aceptará la entrada duplicada. Por lo tanto, cuando intente insertar una nueva fila que ya está presente en su tabla, se producirá este error.

Para resolver esto, establezca la columna de clave principal como AUTO_INCREMENT . Y cuando intenta insertar una nueva fila, ignore la columna de clave principal o inserte el valor NULL en la clave principal.

CREATE TABLE userDetails(
  userId INT(10) NOT NULL AUTO_INCREMENT,
  firstName VARCHAR(50),
  lastName VARCHAR(50),
  isActive INT(1) DEFAULT 0,
  PRIMARY KEY (userId) );

--->and now while inserting 
INSERT INTO userDetails VALUES (NULL ,'John', 'Doe', 1);
  1. Campo de datos únicos - Error Code: 1062. Duplicate entry 'A' for key 'code'

    Puede asignar una columna como única e intentar insertar una nueva fila con un valor ya existente para esa columna producirá este error.

Para superar este error, use INSERT IGNORE lugar de INSERT normal. Si la nueva fila que intenta insertar no duplica un registro existente, MySQL lo inserta como de costumbre. Si el registro es un duplicado, la IGNORE clave IGNORE descarta sin generar ningún error.

INSERT IGNORE INTO userDetails VALUES (NULL ,'John', 'Doe', 1);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow