Insertar registro con último id creado en otra tabla
Te doy la bienvenida a VerTutoriales.com, en esta ocasión vamos a hablar de como realizar varias inserciones en varias tablas de manera que vayan relacionadas por el ID de la primera inserción.
Poniendo un caso real, imaginemos el caso de dos tablas, una de Aventuras y otra de Usuarios, estos pueden tener varias aventuras y por ello tenemos también una tabla intermedia llamada UsuarioAventuras. Si añadimos una aventura a la tabla, debemos de realizar la inserción en la segunda tabla que lo relacione con el Usuario que la ha creado, por lo que tendremos que añadir dos consultas, una primera para crear la aventura y otra segunda que añada el registro en UsuarioAventuras con el ID o el código identificador de la tabla de Aventuras.
Una forma básica, sería añadir el registro en una consulta, realizar la consulta a continuación para traer el máximo ID y por último añadir un nuevo registro con el ID último de la tabla Aventuras junto con el usuario. Eso estaría bien sino tuviéramos en cuenta que otro usuario ha podido añadir justo en el momento otro registro en Aventuras, pudiéndose cruzar (por muy remota que sea la posibilidad) el registro y cambiando los usuarios o asignando una misma aventura a diferentes usuarios.
Para ello utilizaremos una función de MySQL llamada “last_insert_id”.
Como usar Last_insert_id
El uso de last_insert_id es de lo más sencillo y se puede utilizar a continuación de haber realizado la última inserción en la tabla de la que queramos el ID, en nuestro caso la tabla Aventuras. La ventaja de utilizar last_insert_id es que se utiliza dentro de la misma sesión abierta en MySQL, de manera que ese nuevo ID quedará guardado para utilizarse y será el mismo que devuelva la ya mencionada función last_insert_id.
El código de ejemplo de last_insert_id podría ser:
[codesyntax lang=”sql”]
INSERT INTO Aventuras (Nombre, Jugadores) VALUES ("La aventura de Reinos de Papel", 3); INSERT INTO UsuarioAventuras (idUsuario, idAventura) VALUES ($idUsuario, last_insert_id);
[/codesyntax]
He de decir, que ambas tablas, tienen un campo llamado id autonumérico y campo clave o primary key. De esta manera, al insertar el primer registro se añadirá un nuevo Id a la tabla aventuras y al insertar el segundo registro, tomará el último id insertado para utilizarlo en la consulta que lo llame.
Así de sencillo! Como siempre.. Si os gusta compartir! y sino ha quedado claro.. podéis realizar cualquier consulta en los comentarios!
Comments
El otro día tenía la discución con un colega y me decía que era paranóico y que gusto me da saber que alguien pensó lo mismo que yo que s epueden cruzar los datos y como siempre hay un método simple de hacerlo… gracias
Ya lo pensaron antes que nosotros que se podía dar el caso de cruzar ids por multiusuarios… así que a crear algo concreto 😉
cuidado con tu linea $idUsuario, vulnerable a injección sql, utilizar pdo para ello, saludos
¿? El ejemplo es para mostrar cómo utilizar last_insert_id y en ningún momento se ve desde dónde se está tomando la variable $idUsuario…
Os recomiendo ver este tutorial:
http://vertutoriales.com/error-mysql_real_escape_string-deprecated-como-utilizar-mysqli_real_escape_string/
Pregunta: ¿Se puede hacer este mismo procedimiento pero usando el ultimo id de dos tablas diferentes insertándolos en otra?
Tabla Paciente(expediente, nombre, sexo, fechanacimiento, iddomicilio, iddiagnostico)
Tabla DomicilioPaciente(iddomicilio, calle, numero, colonia, localidad, ciudad, estado)
Tabla Diagnostico(iddiagnostico, diagnostico, tratamiento, observaciones)
Y podrían ayudarme dándome un ejemplo.
De antemano gracias
Buenas!
Claro que sí, pero en vez de utilizarlo directamente en MySQL deberás de primero lanzar una consulta y recuperarlo con PHP (si es que estás utilizando tal lenguaje), por ejemplo:
LanzaConsulta1(SelectMYSQL);
$IDUno = mysql_insert_id ([ resource $link_identifier = NULL ] );
LanzaConsulta2(SelectMYSQL);
$IDDos = mysql_insert_id ([ resource $link_identifier = NULL ] );
LanzaConsulta3(SelectMYSQL Con los dos Ids Anteriores)
Aquí tienes la documentación de mysql_insert_id de PHP:
http://php.net/manual/es/function.mysql-insert-id.php
Ya me dices si te aclaré o necesitas mejor ejemplo 🙂
El lenguaje qué utilizo el visual basic estoy aprendiendo a programar empiricamente viendo tutoriales y me basó en ejemplo qué encuentro y en este caso el tuyo me sirvió como ejemplo para usarlo en una tabla. Solo que se me complica al tratar de usarlo ya que manejo dos tablas para ingresar su id en otra. Solo que este ejemplo qué me das no lo entendí.
En resumen como lenguaje natural sería:
Lanzo la primera consulta
recojo el último id de esta última consulta
Lanzo la segunda consulta
recojo el último id de esta última consulta
Teniendo los dos IDs ya puedo generar una tercera consulta con esa información que guardé anteriormente en variables
No sé si la duda es de visual basic (vb) o de lógica de programación.