Entendiendo un poco mas las SQL con el Delfin

Existen muchas funciones y demas palabras reservadas por la sintaxis del lenguaje, en este caso SQL, donde estaba haciendo unas tablas hasta el punto en el que me tranque por unos minutos en una.  Una tabla sin mucha variedad de tipos de campo pero si con muchos campos (e incluso, la tabla mas importante de toda la base de datos).  Surgia un ERROR 1064 (42000) que indicaba un problema con mi sintaxis de CREATE TABLE, revisando, todo parecia estar bien con respecto a la escritura de la SQL, pero MySQL seguia indicando que algo andaba mal.

Decidi pasar por el IRC de mysql-es donde converse con un compatriota que ya he visto en otros canales como ubuntu-ve, aunque me asistio en ver el problema, en esta ocasion me solvente partiendo del mismo aviso de error de MySQL.

Hice la prueba por el phpMyAdmin y tambien obtuve un error en el intento de crear la tabla:

Referenciandome del error de MySQL el cual comenzaba su error desde un campo y de esa forma no continuaba con el resto, decidi cambiar el nombre de un campo llamado natural por natural1 o naturals, sin cambiar mas nada, efectivamente la tabla se creo sin problemas.  Esto es un ejemplo aislado del problema, inicialmente el problema lo presentaba una tabla con mas de 50 campos, por lo que al ver el caso del campo natural, decidi probar a lo cual ya deducia lo que google y un pdf descargado de MySQL me confirmo.

Efectivamente era lo que pensaba, que la palabra natural es una palabra reservada asi como un INSERT o un WHERE propias del lenguaje, siendo casualmente el nombre de mi campo igual a una palabra propia de SQL ocasiona el error, existen NATURAL LEFT JOIN, NATURAL LEFT OUTER, NATURAL RIGTH JOIN y NATURAL RIGTH OUTER JOIN, por lo que al intentar crear la tabla para el motor de MySQL esta SQL tenia tanto ilogica como si quiese crear una tabla llamada INSERT o un campo llamado INSERT o WHERE o JOIN, por lo que obviamente arrojaba el error.  Asi que tuve que cambiar el campo natural por naturals para asi evitar este tipo de conflictos de la SQL. Existen muchas palabras propias del lenguaje que no conocemos porque no las usamos, por ejemplo, NATURAL es algo que nunca he usado por lo que con el pensar de “mmm… sera una palabra reservada de SQL” con lo que se parte de buscar y conocer que efectivamente asi es, igual como en muchos otros lenguajes no se puede coincidir casualmente algo con lo que es propio del lenguaje, asi que deducir la causa de este error no era dificil de pensarlo un poco para cualquiera.

Simplemente son cosas que pasan, sobre todo cuando se sabe que no es error de sintaxis (SQL mal escrita) al revisarla varias veces y saber que esta bien, inmediatamente sabemos entonces que el problema es otro, fue interesante detectar esto.


About this entry