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.

Crear un gestor para Juegos de Rol
Crear un gestor para Juegos de Rol

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:

 

INSERT INTO Aventuras (Nombre, Jugadores) VALUES ("La aventura de Reinos de Papel", 3);
 
INSERT INTO UsuarioAventuras (idUsuario, idAventura) VALUES ($idUsuario, last_insert_id);

 

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!

 

Carlos Dk

Apasionado por la enseñanza y el SEO

8 comentarios en “Insertar registro con último id creado en otra tabla

  • el 8 noviembre, 2015 a las 2:56 am
    Permalink

    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

    Respuesta
    • el 10 noviembre, 2015 a las 10:36 am
      Permalink

      Ya lo pensaron antes que nosotros que se podía dar el caso de cruzar ids por multiusuarios… así que a crear algo concreto 😉

      Respuesta
  • el 8 noviembre, 2017 a las 1:50 am
    Permalink

    cuidado con tu linea $idUsuario, vulnerable a injección sql, utilizar pdo para ello, saludos

    Respuesta
  • el 26 febrero, 2019 a las 8:30 pm
    Permalink

    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

    Respuesta
    • el 26 febrero, 2019 a las 9:54 pm
      Permalink

      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 🙂

      Respuesta
      • el 27 febrero, 2019 a las 2:09 am
        Permalink

        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í.

        Respuesta
        • el 27 febrero, 2019 a las 10:44 am
          Permalink

          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.

          Respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.