Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problemas con los id...

Estas en el tema de Problemas con los id... en el foro de Bases de Datos General en Foros del Web. HOla, mi problema es el siguiente: La clave primaria de mis datos en SQL es un id que se va generando solo (contador) que a ...
  #1 (permalink)  
Antiguo 13/02/2009, 12:12
 
Fecha de Ingreso: febrero-2009
Ubicación: Santa fe
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Problemas con los id...

HOla, mi problema es el siguiente:
La clave primaria de mis datos en SQL es un id que se va generando solo (contador) que a medida que voy haciendo altas va aumentando de 1 (ej: 1, 2, 3,...) //lo clasico :P
La cosa es que cuando borro un dato, se borra todo pero cuando hago un alta el id queda en esa cantidad... tengo un dato con un id= 76 y solo son dos datos guardados!!!
Como puedo hacer para que se recetee, que cuando yo borre un alta y agregue otro este mantenga el orden???

Espero con ansias soluciones o algun consejo! :)
  #2 (permalink)  
Antiguo 22/02/2009, 12:41
jfw
 
Fecha de Ingreso: enero-2009
Mensajes: 117
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: Problemas con los id...

Ten en cuenta que ese campo autoincremental no tiene que tener ningún significado en la tabla, mas que el propio de tener un campo único que actue como clave primaria.
  #3 (permalink)  
Antiguo 22/02/2009, 14:58
 
Fecha de Ingreso: febrero-2009
Ubicación: Santa fe
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con los id...

me keres decir que no puedo hacer nada para arreglar eso?? :/ O que en todo caso tendria que hacerlo yo mismo al id...??
  #4 (permalink)  
Antiguo 22/02/2009, 16:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problemas con los id...

Lo que te quiere decir es que un campo autoincremental se usa en todos los DBMS como PRIMARY KEY, por lo que para poder alterar el valor por defecto (que es siempre uno más del último registro que se creó), ese valor no debe usarse luego jamás en ninguna otra tabla, para ninguna otra cosa. De lo contrario se producirá eventualmente un problema de inconsistencia en la base de datos que estás administrando.
SI y sólo si ese valor de ID nace y muere en la acción de inserción y borrado de esa tabla, puedes reiniciar la numeración. Caso contrario ni se te ocurra tocarlo.
En caso de que ese ID no se use en otra tabla, lo que deberías decirnos es cuál es el DBMS, porque la forma de reiniciar los autoincrementales varían según el motor en cuestión.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/02/2009, 11:09
Avatar de almerak  
Fecha de Ingreso: abril-2006
Ubicación: en algun lugar
Mensajes: 60
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Problemas con los id...

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que te quiere decir es que un campo autoincremental se usa en todos los DBMS como PRIMARY KEY, por lo que para poder alterar el valor por defecto (que es siempre uno más del último registro que se creó), ese valor no debe usarse luego jamás en ninguna otra tabla, para ninguna otra cosa. De lo contrario se producirá eventualmente un problema de inconsistencia en la base de datos que estás administrando.
SI y sólo si ese valor de ID nace y muere en la acción de inserción y borrado de esa tabla, puedes reiniciar la numeración. Caso contrario ni se te ocurra tocarlo.
En caso de que ese ID no se use en otra tabla, lo que deberías decirnos es cuál es el DBMS, porque la forma de reiniciar los autoincrementales varían según el motor en cuestión.
quieres reiniciar el id?
la verdad es que no puedes, como dice el cuate, un id es unico, y jamas en ningun otro momento se debe utilziar como ident de otro registro, y si ocacionarias inconsistencia
de lo contrario si no es un id, entonces podrias resetearlo, por ejemplo cuando es orden de filas de alguna transaccion, cuando se ennumeran, podrias implementar un algoritmo de revaloracion, y si manejas sp, se haria mas facil sin tocar el codigo ;)
espero haberte ayudado :D

--
ηαςђσ μάη reportandose desde foros del web
  #6 (permalink)  
Antiguo 23/02/2009, 13:02
 
Fecha de Ingreso: julio-2006
Ubicación: Sevilla
Mensajes: 94
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Problemas con los id...

JAMÁS deberías reiniciar el id, ya que, como ya han comentado, sólo existe para mantener una clave primaria sólida.

En cualquier caso, y con MySQL:

Código:
ALTER TABLE tutabla AUTO_INCREMENT = 1;
Saludos.
  #7 (permalink)  
Antiguo 23/02/2009, 16:22
jfw
 
Fecha de Ingreso: enero-2009
Mensajes: 117
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: Problemas con los id...

insisto, hay un error de concepto al intentar atribuir un sentido a ese campo autoincremental aparte del de servir como primary key. Para lo que buscas deberías utilizar otro campo.
__________________
Buscador de casas rurales en España
  #8 (permalink)  
Antiguo 24/02/2009, 14:09
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Respuesta: Problemas con los id...

Saludos haber si esto satisface tu inquietud, no es recomendable:

-- VARIABLE PARA ALMACENAR EL ID DE REINICIO DEL IDENTITY
declare @newId as integer
-- CREACION DE TABLA TEMPORAL
create table #tabla ( intId integer identity, varTexto varchar(50))
-- INSERCION DE DATOS
insert into #tabla values( 'no' )
insert into #tabla values( 'es' )
insert into #tabla values( 'recomendable' )
-- SELECT PARA VERIFICAR LOS DATOS, ID's: 1, 2 Y 3
select * from #tabla
-- SE BORRA EL ID MAXIMO
delete from #tabla where intId = 3
-- AL INSERTAR EL ID CONTINUA EN 4 PORQUE EL 3 YA NO LO TOMA
insert into #tabla values( 'recomendable' )
-- BORRAMOS EL ANTERIO REGISTO
delete from #tabla where intId = 4
-- OBTENEMOS EL NUEVO ID
set @newId = ( select max(intId) + 1 from #tabla )
-- RESETEAMOS EL IDENTITY
DBCC CHECKIDENT (#tabla, RESEED, @newId)
-- INSERTAMOS DEBERIA INSERTAR EL ID 3
insert into #tabla values( 'recomendable' )
-- SELECT A LA TABLA, ID's: 1, 2 Y 3
select * from #tabla
-- BORRAMOS LA TABLA TEMPORAL
drop table #tabla

Pdta: no lo he probado, creo q esta sino le das una manita

Saludos
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #9 (permalink)  
Antiguo 24/02/2009, 17:04
Avatar de abel_c_b  
Fecha de Ingreso: junio-2008
Mensajes: 103
Antigüedad: 15 años, 10 meses
Puntos: 1
Busqueda Respuesta: Problemas con los id...

Cita:
Iniciado por almerak Ver Mensaje
quieres reiniciar el id?
la verdad es que no puedes, como dice el cuate, un id es unico, y jamas en ningun otro momento se debe utilziar como ident de otro registro, y si ocacionarias inconsistencia
de lo contrario si no es un id, entonces podrias resetearlo, por ejemplo cuando es orden de filas de alguna transaccion, cuando se ennumeran, podrias implementar un algoritmo de revaloracion, y si manejas sp, se haria mas facil sin tocar el codigo ;)
espero haberte ayudado :D

--
ηαςђσ μάη reportandose desde foros del web
Eso no es muy cierto, osea hay que ser claro, eso si se puede otra cosa es que no se deba modificar, pienso que debemos ser un poco mas claros ya que en realidad la información se puede distorcionar; candyvf si en realidad lo necesitas modificar tienes la opción que te acaba de thumper, revisala y pruebala, si buscas bien en google vas a encontrar un algoritmo que sirve, precisamente para lo que quieres hacer, bueno nos comentas como te fue, saludos
  #10 (permalink)  
Antiguo 01/03/2009, 13:13
 
Fecha de Ingreso: febrero-2009
Ubicación: Santa fe
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas con los id...

osea, esta bien... los id tendrian que ser asi, cuando uno muere no pierde su nro de documento y lo usa otro. Igualmente si yo kiero recetear los id tendria que hacer algo como guardar los id que voy borrando y si agrego un alta verificar si hay borrados guardarlo con un id de esos y sino con el posterior del ultimo guardado. :) Vamos a ver como lo hacemos! Gracias por la ayuda!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:32.