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

[SOLUCIONADO] reiniciar autoincrement

Estas en el tema de reiniciar autoincrement en el foro de Mysql en Foros del Web. Hola a todos,... tengo una tabla donde se genera un código inteligente mediante autoincrement,... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE IF NOT EXISTS ...
  #1 (permalink)  
Antiguo 29/09/2014, 10:16
 
Fecha de Ingreso: septiembre-2014
Ubicación: Colombia
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Pregunta reiniciar autoincrement

Hola a todos,... tengo una tabla donde se genera un código inteligente mediante autoincrement,...

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `BDAA`.`NUM_REFERENCIAS` (
  2.   `id_linea_numref` TINYINT NOT NULL,
  3.   `id_prenda_numref` TINYINT NOT NULL,
  4.   `id_cons_numref` SMALLINT NOT NULL AUTO_INCREMENT,
  5.   `num_ref_numref` VARCHAR(6) NULL,
  6.   PRIMARY KEY (`id_linea_numref`, `id_prenda_numref`, `id_cons_numref`))
  7. ENGINE = MyISAM

Es así que con insertar el id_linea_numref y id_prenda_numref, el motor genera un consecutivo para ese combo y luego lo inserta concatenado en el campo num_ref_numref mediante un SP generando así un código único cada vez,...

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE add_numreferencia (a tinyint, b mediumint(2))
  4.  
  5. INSERT INTO bdaa.NUM_REFERENCIAS (id_linea_numref, id_prenda_numref)
  6. VALUES (a,b);
  7.  
  8. SET @ref = concat(a,LPAD(b,2,'0'),LPAD(LAST_INSERT_ID(),3,'0'));
  9.  
  10.  
  11. UPDATE bdaa.NUM_REFERENCIAS
  12. set num_ref_numref = @ref
  13. where id_linea_numref =a
  14. and id_prenda_numref= b
  15. and id_cons_numref = LAST_INSERT_ID();
  16.  

Ingresando datos:

Código MySQL:
Ver original
  1. id_linea_numref = 1
  2. id_prenda_numref = 10
  3. id_cons_numref generado = 001
  4. num_ref_numref concatenado = 110001

El problema radica en que por combo solo puedo disponer de 999 números y me gustaría que cuando llegue al último registro permitido comience nuevamente la cuenta en cero... ejemplo

Último num_ref_numref concatenado = 110999
Siguiente num_ref_numref concatenado = 1100001

He consultado en varias partes y no he logrado el resultado deseado,... espero alguien me pueda dar alguna luz para darle solución a este problema,... gracias
  #2 (permalink)  
Antiguo 29/09/2014, 10:52
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, 4 meses
Puntos: 2658
Respuesta: reiniciar autoincrement

Prmero, para el efecto de lo que quieres hacer no puedes usar autoincrementales. Bajo ningún concepto.
Para que se entienda la limitación: Un autoincremental únicamente se puede reiniciar:
1) Truncando la tabla, con lo que se pierden todos los registros anteriores.
2) Borrando toda la tabla, y modificando el AI con ALTER TABLE, que a los efectos es lo mismo: Se pierden todos los datos anteriores.

Ahora bien, partamos de la base que en el ejemplo que planteas sólo podrías tener 1000 unidades de lo que sea. En cuanto tengas 1001, alguno de los tres conceptos deberán incrementar en 1 para mantenber la unciidad de clave.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/10/2014, 07:03
 
Fecha de Ingreso: septiembre-2014
Ubicación: Colombia
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: reiniciar autoincrement

Gracias gnzsoloyo por tu interés,... partiendo de tu respuesta logré darle solución a mi problema de la siguiente manera,...

Código MySQL:
Ver original
  1. -- paso las dos unicas varaible necesarias para generar el código
  2.  
  3. CREATE PROCEDURE add_numreferencia (a tinyint(1), b mediumint(2))
  4.  
  5. -- inserto estos datos en la tabla
  6.  
  7. INSERT INTO bdaa.NUM_REFERENCIAS (id_linea_numref, id_prenda_numref)
  8. VALUES (a,b);
  9.  
  10. -- hago la selección del último consecutivo
  11.  
  12. select id_cons_numref
  13. into @ultimoCons
  14. from NUM_REFERENCIAS
  15. where id_linea_numref = a
  16. and id_prenda_numref = b
  17. order by id_cons_numref desc
  18.  
  19. -- si el último consecutivo es igual a 999
  20. -- borro toda la serie para comenzar una nueva
  21.  
  22. if @ultimoCons = 999 then
  23.  
  24. delete from NUM_REFERENCIAS
  25. where id_linea_numref = a
  26. and id_prenda_numref = b
  27. and id_cons_numref is not null;
  28.  
  29. -- ahora inserto los datos concatenados iniciando desde 000
  30. SET @ref = concat(a,LPAD(b,2,'0'),LPAD(0,3,'0'));
  31.  
  32. UPDATE bdaa.NUM_REFERENCIAS
  33. set id_cons_numref=0,
  34. num_ref_numref = @ref
  35. where id_linea_numref = a
  36. and id_prenda_numref = b
  37. and id_cons_numref is null
  38.  
  39. -- /////////////////////////////////////////////////////////////
  40.  
  41. -- esta parte del procedimiento se da si la serie aun no tiene registros
  42.  
  43. if @ultimoCons is null then
  44.  
  45. SET @ref = concat(a,LPAD(b,2,'0'),LPAD(0,3,'0'));
  46.  
  47. UPDATE bdaa.NUM_REFERENCIAS
  48. set id_cons_numref=0,
  49. num_ref_numref = @ref
  50. where id_linea_numref = a
  51. and id_prenda_numref = b
  52. and id_cons_numref is null
  53.  
  54. -- ///////////////////////////////////////////////////////////////
  55.  
  56. -- esta parte del procedimiento se da si la serie ya tiene registros
  57.  
  58. if @ultimoCons is not null then
  59.  
  60. -- aumentamos el valor de último registro en 1
  61. SET @consecutivo = @ultimoCons+1;
  62.  
  63. -- concatenamos todos los datos
  64. SET @ref = concat(a,LPAD(b,2,'0'),LPAD(@consecutivo,3,'0'));
  65.  
  66. -- los insertamos en la tabla
  67. UPDATE bdaa.NUM_REFERENCIAS
  68. set id_cons_numref=@consecutivo,
  69. num_ref_numref = @ref
  70. where id_linea_numref = a
  71. and id_prenda_numref = b
  72. and id_cons_numref is null
  73.  
  74.  END IF;
  75. -- //////////////////////////////////////////////////////////////
  76.  

no se que tan eficiente sea mi código pero funciona para los efectos que planteaba en mi pregunta,... espero pueda ser de ayuda para alguien mas,... gracias!!!!

Etiquetas: autoincrementable, inteligente, registros
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 16:52.