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

Auto_increment se salta id's

Estas en el tema de Auto_increment se salta id's en el foro de Mysql en Foros del Web. He estado repasando unas cosas de base de datos y me resulto un problema con el auto_increment de mysql, inserto un grupo de 10 y ...
  #1 (permalink)  
Antiguo 13/01/2011, 17:06
 
Fecha de Ingreso: noviembre-2010
Ubicación: El Salvador
Mensajes: 44
Antigüedad: 13 años, 5 meses
Puntos: 6
Auto_increment se salta id's

He estado repasando unas cosas de base de datos y me resulto un problema con el auto_increment de mysql, inserto un grupo de 10 y todo bien, en teoría el próximo auto_increment seria el 11, pero me aparece que es el 16. Inserto otro grupo de 10 en teoría el próximo seria el 26 pero me sale que es el 31, y así sucesivamente.

He determinado que es un trigger en esa tabla que me causa problema ¿porquè? es lo que no he podido averiguar todavía, pero he probado eliminar ese trigger, vaciar la tabla y llenar datos en grupos de 10 otra vez y así funciona excelente.

La estrutura de la tabla es:
Código SQL:
Ver original
  1. CREATE TABLE `nombres` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombres` VARCHAR(20) CHARACTER SET utf8 DEFAULT NULL,
  4.  `apellidos` VARCHAR(20) CHARACTER SET utf8 DEFAULT NULL,
  5.  PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB

y el trigger es:
Código SQL:
Ver original
  1. CREATE TRIGGER `respaldo_nombres` AFTER UPDATE ON `nombres`
  2.  FOR EACH ROW BEGIN
  3. INSERT INTO `respaldo_nombres` SET
  4. respaldo_nombres.id=OLD.id,
  5. respaldo_nombres.NombresAntiguos=OLD.nombres,
  6. respaldo_nombres.NombresNuevos=NEW.nombres,
  7. respaldo_nombres.apellidosAntiguos=OLD.apellidos,
  8. respaldo_nombres.apellidosNuevos=NEW.apellidos
  9. ON duplicate KEY UPDATE
  10. respaldo_nombres.NombresAntiguos=OLD.nombres,
  11. respaldo_nombres.NombresNuevos=NEW.nombres,
  12. respaldo_nombres.apellidosAntiguos=OLD.apellidos,
  13. respaldo_nombres.apellidosNuevos=NEW.apellidos;
  14. END

Esta es la sentencia de prueba que utilizo para insertar los datos:
Código SQL:
Ver original
  1. INSERT INTO nombres(nombres,apellidos) VALUES ('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg')

Ojala alguien me pueda dar una pista de lo que puede estar mal.
  #2 (permalink)  
Antiguo 14/01/2011, 07:57
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Auto_increment se salta id's

Postea la sentencia con la que creaste la tabla respaldo_nombres. Por ahí debe estar el lio.

He recreado tu ambiente y no me pasa lo que dices. Los autoincrement se hacen correctamente.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 14/01/2011, 11:09
 
Fecha de Ingreso: noviembre-2010
Ubicación: El Salvador
Mensajes: 44
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Auto_increment se salta id's

aqui esta respaldo_nombres:
Código MySQL:
Ver original
  1. CREATE TABLE `respaldo_nombres` (
  2.  `id` int(11) NOT NULL,
  3.  `nombresAntiguos` varchar(20) DEFAULT NULL,
  4.  `nombresNuevos` varchar(20) DEFAULT NULL,
  5.  `apellidosAntiguos` varchar(20) DEFAULT NULL,
  6.  `apellidosNuevos` varchar(20) DEFAULT NULL,
  7.  PRIMARY KEY (`id`)

y por si las dudas agrego una vista que cree solo por probar un metodo case
Código MySQL:
Ver original
  1. CREATE  VIEW `Vista1` AS select (case `nombres`.`id` when 1 then 'uno' when 2 then 'dos' else 'nada' end) AS `id`,`nombres`.`nombres` AS `nombres`,`nombres`.`apellidos` AS `apellidos` from `nombres`

Gracias por tomarte el tiempo de revisarlo, crees que podría ser cosa de configuración en el servidor?? utilizo XAMPP.
  #4 (permalink)  
Antiguo 14/01/2011, 12:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Auto_increment se salta id's

Mira esta secuencia.

Código MySQL:
Ver original
  1. mysql> CREATE TABLE `nombres` (
  2.     ->  `id` int(11) NOT NULL AUTO_INCREMENT,
  3.     ->  `nombres` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  4.     ->  `apellidos` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  5.     ->  PRIMARY KEY (`id`)
  6.     -> ) ENGINE=InnoDB;
  7. Query OK, 0 rows affected (0.01 sec)
  8.  
  9. mysql> CREATE TABLE `respaldo_nombres` (
  10.     ->  `id` INT(11) NOT NULL,
  11.     ->  `nombresAntiguos` VARCHAR(20) DEFAULT NULL,
  12.     ->  `nombresNuevos` VARCHAR(20) DEFAULT NULL,
  13.     ->  `apellidosAntiguos` VARCHAR(20) DEFAULT NULL,
  14.     ->  `apellidosNuevos` VARCHAR(20) DEFAULT NULL,
  15.     ->  PRIMARY KEY (`id`)
  16.     -> ) ENGINE=INNODB;
  17. Query OK, 0 rows affected (0.02 sec)
  18.  
  19. mysql> delimiter $$
  20. mysql> CREATE TRIGGER `respaldo_nombres` AFTER UPDATE ON `nombres`
  21.     ->  FOR EACH ROW begin
  22.     -> INSERT INTO `respaldo_nombres` SET
  23.     -> respaldo_nombres.id=old.id,
  24.     -> respaldo_nombres.NombresAntiguos=old.nombres,
  25.     -> respaldo_nombres.NombresNuevos=new.nombres,
  26.     -> respaldo_nombres.apellidosAntiguos=old.apellidos,
  27.     -> respaldo_nombres.apellidosNuevos=new.apellidos
  28.     -> respaldo_nombres.NombresAntiguos=old.nombres,
  29.     -> respaldo_nombres.NombresNuevos=new.nombres,
  30.     -> respaldo_nombres.apellidosAntiguos=old.apellidos,
  31.     -> respaldo_nombres.apellidosNuevos=new.apellidos;
  32.     -> end$$
  33. Query OK, 0 rows affected (0.01 sec)
  34.  
  35. mysql> delimiter ;
  36. mysql> INSERT INTO nombres(nombres,apellidos) VALUES ('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','
  37. fg'),('asdifh','sdffg'),('asdifh','sdffg');
  38. Query OK, 10 rows affected (0.00 sec)
  39. Records: 10  Duplicates: 0  Warnings: 0
  40.  
  41. mysql> INSERT INTO nombres(nombres,apellidos) VALUES ('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','
  42. fg'),('asdifh','sdffg'),('asdifh','sdffg');
  43. Query OK, 10 rows affected (0.00 sec)
  44. Records: 10  Duplicates: 0  Warnings: 0
  45.  
  46. mysql> select *from nombres;
  47. +----+---------+-----------+
  48. | id | nombres | apellidos |
  49. +----+---------+-----------+
  50. |  1 | asdifh  | sdffg     |
  51. |  2 | asdifh  | sdffg     |
  52. |  3 | asdifh  | sdffg     |
  53. |  4 | asdifh  | sdffg     |
  54. |  5 | asdifh  | sdffg     |
  55. |  6 | asdifh  | sdffg     |
  56. |  7 | asdifh  | sdffg     |
  57. |  8 | asdifh  | sdffg     |
  58. |  9 | asdifh  | sdffg     |
  59. | 10 | asdifh  | sdffg     |
  60. | 11 | asdifh  | sdffg     |
  61. | 12 | asdifh  | sdffg     |
  62. | 13 | asdifh  | sdffg     |
  63. | 14 | asdifh  | sdffg     |
  64. | 15 | asdifh  | sdffg     |
  65. | 16 | asdifh  | sdffg     |
  66. | 17 | asdifh  | sdffg     |
  67. | 18 | asdifh  | sdffg     |
  68. | 19 | asdifh  | sdffg     |
  69. | 20 | asdifh  | sdffg     |
  70. +----+---------+-----------+
  71. 20 rows in set (0.00 sec)
  72.  
  73. mysql> update nombres set apellidos='otra cosa' where id=10;
  74. Query OK, 1 row affected (0.00 sec)
  75. Rows matched: 1  Changed: 1  Warnings: 0
  76.  
  77. mysql> select *from nombres;
  78. +----+---------+-----------+
  79. | id | nombres | apellidos |
  80. +----+---------+-----------+
  81. |  1 | asdifh  | sdffg     |
  82. |  2 | asdifh  | sdffg     |
  83. |  3 | asdifh  | sdffg     |
  84. |  4 | asdifh  | sdffg     |
  85. |  5 | asdifh  | sdffg     |
  86. |  6 | asdifh  | sdffg     |
  87. |  7 | asdifh  | sdffg     |
  88. |  8 | asdifh  | sdffg     |
  89. |  9 | asdifh  | sdffg     |
  90. | 10 | asdifh  | otra cosa |
  91. | 11 | asdifh  | sdffg     |
  92. | 12 | asdifh  | sdffg     |
  93. | 13 | asdifh  | sdffg     |
  94. | 14 | asdifh  | sdffg     |
  95. | 15 | asdifh  | sdffg     |
  96. | 16 | asdifh  | sdffg     |
  97. | 17 | asdifh  | sdffg     |
  98. | 18 | asdifh  | sdffg     |
  99. | 19 | asdifh  | sdffg     |
  100. | 20 | asdifh  | sdffg     |
  101. +----+---------+-----------+
  102. 20 rows in set (0.00 sec)
  103.  
  104. mysql> INSERT INTO nombres(nombres,apellidos) VALUES ('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','sdffg'),('asdifh','
  105. fg'),('asdifh','sdffg'),('asdifh','sdffg');
  106. Query OK, 10 rows affected (0.00 sec)
  107. Records: 10  Duplicates: 0  Warnings: 0
  108.  
  109. mysql> select *from nombres;
  110. +----+---------+-----------+
  111. | id | nombres | apellidos |
  112. +----+---------+-----------+
  113. |  1 | asdifh  | sdffg     |
  114. |  2 | asdifh  | sdffg     |
  115. |  3 | asdifh  | sdffg     |
  116. |  4 | asdifh  | sdffg     |
  117. |  5 | asdifh  | sdffg     |
  118. |  6 | asdifh  | sdffg     |
  119. |  7 | asdifh  | sdffg     |
  120. |  8 | asdifh  | sdffg     |
  121. |  9 | asdifh  | sdffg     |
  122. | 10 | asdifh  | otra cosa |
  123. | 11 | asdifh  | sdffg     |
  124. | 12 | asdifh  | sdffg     |
  125. | 13 | asdifh  | sdffg     |
  126. | 14 | asdifh  | sdffg     |
  127. | 15 | asdifh  | sdffg     |
  128. | 16 | asdifh  | sdffg     |
  129. | 17 | asdifh  | sdffg     |
  130. | 18 | asdifh  | sdffg     |
  131. | 19 | asdifh  | sdffg     |
  132. | 20 | asdifh  | sdffg     |
  133. | 21 | asdifh  | sdffg     |
  134. | 22 | asdifh  | sdffg     |
  135. | 23 | asdifh  | sdffg     |
  136. | 24 | asdifh  | sdffg     |
  137. | 25 | asdifh  | sdffg     |
  138. | 26 | asdifh  | sdffg     |
  139. | 27 | asdifh  | sdffg     |
  140. | 28 | asdifh  | sdffg     |
  141. | 29 | asdifh  | sdffg     |
  142. | 30 | asdifh  | sdffg     |
  143. +----+---------+-----------+
  144. 30 rows in set (0.00 sec)
  145.  
  146. mysql>

A mi no me pasa esto que dices.... debes tener otro objeto que te genere este problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 14/01/2011, 13:13
 
Fecha de Ingreso: noviembre-2010
Ubicación: El Salvador
Mensajes: 44
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Auto_increment se salta id's

volveré a revisar, porque se me hace muy raro que el trigger me haga problema y encima porque solo se activa cuando se hace un update.

Gracias por tu tiempo.
  #6 (permalink)  
Antiguo 14/01/2011, 18:22
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: Auto_increment se salta id's

Pregunta: Cuando dices que el siguiente autoincrement debería ser el 11 pero aparece el 16, ¿Cómo lo sabes? ¿Qué haces exactamente para saberlo?
¿Es porque lo consultas o es que así aparece insertado en la tabla?
Si aparece insertado, ¿le estás dejando a MySQL gestionarlo o estás enviando el siguiente valor de alguna otra forma?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/01/2011, 18:27
 
Fecha de Ingreso: noviembre-2010
Ubicación: El Salvador
Mensajes: 44
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Auto_increment se salta id's

como utilizo phpmyadmin, veo la estructura de la tabla y luego hago ver los detalles, y ahí aparece en "Próxima Autoindex", y cuando hago el insert exactamente empieza por el 16.

Etiquetas: auto, increment
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 23:45.