Variable definida por el usuario en una consulta INSERT para MySQL
Frecuentes
Visto 17,970 veces
11
Necesito usar una variable definida por el usuario en una consulta INSERT para MySQL, vea un ejemplo a continuación:
INSERT INTO `posts`(`id`) VALUES(NULL);
SET @last_insert_id = LAST_INSERT_ID();
INSERT INTO `comments`(`id`, `post_id`) VALUES(NULL, "@last_insert_id");
Este ejemplo no funciona e insertó 0. ¿Qué estoy haciendo mal?
1 Respuestas
19
No hay necesidad de almacenarlo en una variable. solo puedes llamar LAST_INSERT_ID()
dentro de lo siguiente INSERT
.
INSERT INTO `comments`(`id`, `post_id`) VALUES (NULL, LAST_INSERT_ID());
... a menos que tenga múltiples inserciones para realizar con esa identificación.
En ese caso, la sintaxis adecuada para usar la variable es hacerlo sin comillas:
INSERT INTO `posts`(`id`) VALUES (NULL);
SET @last_insert_id = LAST_INSERT_ID();
/* Several new entries using the same @last_insert_id */
INSERT INTO `comments`(`id`, `post_id`) VALUES (NULL, @last_insert_id);
INSERT INTO `comments`(`id`, `post_id`) VALUES (NULL, @last_insert_id);
INSERT INTO `comments`(`id`, `post_id`) VALUES (NULL, @last_insert_id);
INSERT INTO `comments`(`id`, `post_id`) VALUES (NULL, @last_insert_id);
INSERT INTO `comments`(`id`, `post_id`) VALUES (NULL, @last_insert_id);
contestado el 22 de mayo de 12 a las 16:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas mysql variables insert user-defined or haz tu propia pregunta.
Necesito usar una variable definida por el usuario. Arriba había un ejemplo simple. - Igor Timoshenko
¿Es lo suficientemente consistente? Me refiero a que si alguien más o cron está haciendo algunas inserciones, SET @last_insert_id = LAST_INSERT_ID(); ¿toma la última identificación de qué incremento automático de qué tabla? - Shareef
@shareef LAST_INSERT_ID() devuelve un valor de la última ID insertada desde la conexión de base de datos actual. Otro usuario u otro cron o similar estaría operando desde una conexión de base de datos diferente con sus propios valores de last_insert_id, por lo que los valores serían consistentes. - Michael Berkowski