MySQL INSERT con alias de la tabla
-
11-10-2019 - |
Pregunta
Me sucede que tiene dos columnas que tienen el mismo nombre que dos palabras reservadas de SQL, clave y valor. Cuando se utiliza la instrucción SELECT que puedo crear un alias de tabla y resolver de esa manera.
Ahora estoy tratando de inserción de datos y parece que no se puede crear alias de tabla en la instrucción INSERT.
INSERT INTO attributeStrings ats
(ats.ItemID,ats.Key,ats.Value)
VALUES (3,'Categories','TechGUI')
Me sale error en 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')'
lo que indica que alias no puede ser creado.
¿Hay maneras de resolver esto sin cambiar el nombre de las columnas clave y el valor?
Solución
El uso de back-tick para escapar de las palabras reservadas.
INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI')
Las apariencias como inserto no soporta alias. ver aquí
Editar: ok, el árbitro MySQL dice ningún alias de inserción
No funciona
mysql> INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI');
Query OK, 1 row affected (0.03 sec)
mysql> select * from attributeStrings;
+--------+------------+---------+
| ItemId | Key | Value |
+--------+------------+---------+
| 3 | Categories | TechGUI |
+--------+------------+---------+
1 row in set (0.00 sec)
Otros consejos
Es fácil ser el sabelotodo en base a su pregunta ??p>
INSERT INTO attributeStrings
VALUES (3,'Categories','TechGUI');
/* if the table have more than 3 columns, fill-up every column then */
Otros problemas
Sin sentido de tener camelCase, porque las ventanas no es compatible con el nombre de archivo entre mayúsculas y minúsculas todavía.
Por lo tanto, prácticamente se puede tener la misma mesa con diferentes casos en linux / mac, pero no en las ventanas
mysql> create table abc (id int(10)); Query OK, 0 rows affected (0.00 sec) mysql> create table abC (id int(10)); Query OK, 0 rows affected (0.01 sec)
Key es un
palabra reservada
En MySQL por lo que debe ser citado
Es posible comprobar todas las palabras reservadas aquí
parece que no se puede crear alias de tabla en la instrucción INSERT
Algunos productos SQL (por ejemplo, SQL Server) permiten hacer este pero no estoy seguro de que es una cosa buena.
De acuerdo con las normas SQL, un alias debe tener el efecto de la mesa de ser materializado es decir, un INSERT
(o cualquier otro sabor de actualización) a una tabla de alias debe salir de la tabla base subyacente (s) afectada.
En SQL Server, un INSERT
tales afecta la tabla base subyacente (s) pero creo que el (no conforme) efecto real es lo que la mayoría de los codificadores de SQL se puede esperar que ocurra en esa situación. Dicho de otra manera, una instrucción INSERT válido que dio lugar a ninguna fila que se agregan Creo que se sospecha inicialmente como un error, a pesar de que esa es la manera estándar SQL se supone que funciona.
Así que creo que la situación no permitir que surjan en el primer lugar, mientras que ser de nuevo técnicamente no conformes con las normas, es deseable, en mi opinión.