registros español borrar biblia mysql reserved-words

español - Error de sintaxis debido al uso de una palabra reservada como una tabla o nombre de columna en MySQL



manual de mysql 6.0 en español pdf (1)

El problema

En MySQL, ciertas palabras como SELECT , INSERT , DELETE , etc. son palabras reservadas. Como tienen un significado especial, MySQL lo trata como un error de sintaxis cada vez que los usa como nombre de tabla, columna u otro tipo de identificador, a menos que rodee el identificador con palos de retroceso.

Como se menciona en los documentos oficiales, en la sección 10.2 Nombres de objetos de esquema (énfasis añadido):

Ciertos objetos dentro de MySQL, incluida la base de datos, la tabla, el índice, la columna, el alias, la vista, el procedimiento almacenado, la partición, el espacio de tablas y otros nombres de objetos se conocen como identificadores .

...

Si un identificador contiene caracteres especiales o es una palabra reservada , debe citarla cada vez que se refiera a ella.

...

El carácter de cita del identificador es el backtick (" ` "):

Se puede encontrar una lista completa de palabras clave y palabras reservadas en la sección 10.3 Palabras clave y palabras reservadas . En esa página, las palabras seguidas por "(R)" son palabras reservadas. Algunas palabras reservadas se enumeran a continuación, incluidas muchas que tienden a causar este problema.

  • AÑADIR
  • Y
  • ANTES DE
  • POR
  • LLAMADA
  • CASO
  • CONDICIÓN
  • BORRAR
  • DESC
  • DESCRIBIR
  • DE
  • GRUPO
  • EN
  • ÍNDICE
  • INSERTAR
  • INTERVALO
  • ES
  • LLAVE
  • ME GUSTA
  • LÍMITE
  • LARGO
  • PARTIDO
  • NO
  • OPCIÓN
  • O
  • ORDEN
  • DIVIDIR
  • REFERENCIAS
  • SELECCIONAR
  • MESA
  • A
  • ACTUALIZAR
  • DÓNDE

La solución

Tienes dos opciones.

1. No use palabras reservadas como identificadores

La solución más simple es simplemente evitar el uso de palabras reservadas como identificadores. Probablemente pueda encontrar otro nombre razonable para su columna que no sea una palabra reservada.

Hacer esto tiene un par de ventajas:

  • Elimina la posibilidad de que usted u otro desarrollador que use su base de datos accidentalmente escriba un error de sintaxis debido a que se olvida o no se sabe que un identificador particular es una palabra reservada. Hay muchas palabras reservadas en MySQL y es poco probable que la mayoría de los desarrolladores las conozcan todas. Al no usar estas palabras en primer lugar, evitas dejar trampas para ti o para futuros desarrolladores.

  • Los medios para citar identificadores difieren entre dialectos SQL. Mientras que MySQL usa los backticks para citar identificadores de forma predeterminada, el SQL que cumple con ANSI (y de hecho MySQL en modo ANSI SQL, como se indica here ) utiliza comillas dobles para citar identificadores. Como tal, las consultas que citan identificadores con palos de fondo son menos fáciles de transportar a otros dialectos de SQL.

En aras de reducir el riesgo de futuros errores, este suele ser un curso de acción más inteligente que el citado por el identificador.

2. Usa los apoyos

Si el cambio de nombre de la tabla o columna no es posible, envuelva el identificador ofensivo en pausas ( ` ) como se describe en la cita anterior de 10.2 Nombres de objeto de esquema .

Un ejemplo para demostrar el uso (tomado de 10.3 palabras clave y palabras reservadas ):

mysql> CREATE TABLE interval (begin INT, end INT); ERROR 1064 (42000): You have an error in your SQL syntax. near ''interval (begin INT, end INT)'' mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.01 sec)

Del mismo modo, la consulta de la pregunta se puede arreglar al envolver la clave de palabra key en los resquicios, como se muestra a continuación:

INSERT INTO user_details (username, location, `key`) VALUES (''Tim'', ''Florida'', 42)"; ^ ^

Estoy tratando de ejecutar una simple consulta de MySQL como a continuación:

INSERT INTO user_details (username, location, key) VALUES (''Tim'', ''Florida'', 42)

Pero me aparece el siguiente error:

Usted tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de ''key) VALUES (''Tim'', ''Florida'', 42)'' en la línea 1

¿Cómo puedo solucionar el problema?