entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

¿Cómo puedo recuperar el ID de una fila insertada en SQL?

Bien, tengo un codigo en mysql que me da el siguiente ID, por ejemplo si tengo registro con 12 y agrego fila, ahora es 13, pero ahora lo elimino lo que quiero es que me lo respete y el siguiente ID sera 14. Ya no se tomara el 13 aunque se elimine.
Mi codigo en MYSQL es:

SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nombre_base_de_datos' AND TABLE_NAME = 'nombre_de_la_tabla';

Lo que quiero es lo mismo, solo que con SQLServer, conozco el:

SCOPE_IDENTITY()

y sus variantes, pero tengo que agregar una fila primero y luego eliminar. No me gustaria usar el MAX pero si es lo unico pues ni modos.
Gracias

0voto

Peter comentado

Por favor pon los títulos de tu preguntas en español.

Saludos.

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Hola @ItIsJAPO,

o te falta explicarnos algo, o lo que estás haciendo no tiene sentido.

Basta en MySQL y en MS SQL Server crear la clave primaria como autoincremental para que el propio RDBMS tenga el comportamiento que indicás con las tablas, es decir, que cada registro tenga por ID el número siguiente al anterior, y que en caso de borrarlo no se repitan.

La query que estás ejecutando sobre information_schema es innecesaria y puede fallar:

  • si estás en el mismo script preguntando por el número siguiente y luego usándolo, saría lo mismo declarar la clave primaria como INT auto_increment
  • si estás haciendo la consulta para saber cual será el próximo número y usarlo más tarde, puede ser que otro usuario ejecutando el mismo script termine primero, con lo que los números no se corresponderán con lo consultado previamente.

No me queda claro por tu pregunta, pero si lo que querés consultar es el últmo ID asignado, la función mysqli_last_id() te lo devuelvo, o si estás usando PDO te lo devuelve PDO::lastInsertId ()

Saludos cordiales!

0voto

ItIsJAPO comentado

Lo que pasa es que en mi form quiero que aparesca el el id, es decir, que sepa el siguiente ID sin aun haberse registrado la fila. No lo quiero para registrar, por que efectivamente es auto_increment. Eso lo trabaje en MySQL, y ahora no se como hacerlo en SQL. Gracias

0voto

Leonardo-Tadei comentado

Pero como te decía, el ID que muestres luego puede no cumplirse, en caso de varios usuarios a la vez accediendo al sistema!

Tal vez si nos cuentas para qué es necesario mostrar el próximo ID, podamos orientarte mejor sobre alguna solución, como la reserva de registros u otras técnicas...

0voto

ItIsJAPO comentado

En este caso, solo era como el posible id, aparte le confirmaria al usuario con cual id quedo. Solo un usuario a la vez, es para uso personal (un solo equipo a la vez con un usuario) por eso no me intereso mucho la propiedad acid, ya vi que no hay solucion, y lo mas cercano es lo que me respondieron. Gracias por todo :D

0voto

Leonardo-Tadei comentado

Hola @ItIsJAPO,

en este escenario tan puntual, para garantizar que no se reuse el ID de un registro borrado, no te sirve hacer solamente SELECT MAX(ID) AS LastID FROM TU_TABLA;.

Una estrategia que soluciona el problema es, en el primer paso, hacer nu INSERT del registro con los datos vacíos, luego consultar el ID asignado por el RDBMS, y cuando el usuario completa los datos, hacer un update para completarlo.

En caso de que el usuario cancele la operación, borrás el registro (del que ya tienes el ID).

De esta forma mostrás el ID del registro correcto, y en caso de no usarse, el número queda descartado para siempre.

Saludos cordiales!

0voto

ItIsJAPO comentado

Me encanta la idea!! Gracias.

1voto

GusGarsaky Puntos5480

Puedes usar SELECT MAX(ID) AS LastID FROM TU_TABLA;. Obviamente, te devuelve el ID más grande que pertenece al último registro insertado.

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta