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?

¿Fue útil?

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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top