Variable definida por el usuario en una consulta INSERT para MySQL

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?

preguntado el 22 de mayo de 12 a las 15:05

1 Respuestas

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

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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.