Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/06/2015, 08:34
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Truncate table sin eliminar informacion

Hola ArturoGallegos:

No entiendo muy bien qué problemas te puede arrojar el hecho de que un autoincremental pase de 100 a 6000... en realidad este valor simplemente es una referencia para MySQL... en este sentido no le veo ninguna utilidad a hacer que el índice continue en el 101...

Sin embargo, tus razones tendrás para querer hacerlo así, puedes alterar el valor de un índice autoincremental con ALTER TABLE, así;

Código MySQL:
Ver original
  1. mysql> ALTER TABLE tabla AUTO_INCREMENT = 101;

Sin embargo, debes asegurarte que no existan registros ya en la tabla con un valor en este campo mayor a 101... ya que simplemente no servirá. checa este ejemplo:

imagina que tienes una tabla así:

Código MySQL:
Ver original
  1.     ->                     descripcion varchar(20),
  2.     ->                     primary key (id));
  3. Query OK, 0 rows affected (0.58 sec)
  4.  
  5. mysql> INSERT INTO tabla VALUES (null, 'uno'), (null, 'dos'), (null, 'tres');
  6. Query OK, 3 rows affected (0.17 sec)
  7. Records: 3  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM tabla;
  10. +----+-------------+
  11. | id | descripcion |
  12. +----+-------------+
  13. |  1 | uno         |
  14. |  2 | dos         |
  15. |  3 | tres        |
  16. +----+-------------+
  17. 3 rows in set (0.00 sec)

Tú puedes cambiar el auto incremental para que inicie desde un número distinto. En el ejemplo, el ID que continuaría sería el 4, pero si queremos que inicie en el 100, podemos hacer esto:

Código MySQL:
Ver original
  1. mysql> ALTER TABLE tabla AUTO_INCREMENT=100;
  2. Query OK, 0 rows affected (0.19 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0

De esta manera, al insertar un nuevo registro, se insertaría a partir del valor que acabamos de especificarle:

Código:
mysql> INSERT INTO tabla VALUES (null, 'cien'), (null, 'ciento uno');
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM tabla;
+-----+-------------+
| id  | descripcion |
+-----+-------------+
|   1 | uno         |
|   2 | dos         |
|   3 | tres        |
| 100 | cien        |
| 101 | ciento uno  |
+-----+-------------+
5 rows in set (0.00 sec)
Sin embargo, si ahora queremos regresar el auto incremental para que continue a partir del 4 ESTO NO SERÁ POSIBLE, PUES EXISTEN REGISTROS DESPUÉS DEL 4:

Código MySQL:
Ver original
  1. mysql> ALTER TABLE tabla AUTO_INCREMENT=4;
  2. Query OK, 0 rows affected (0.09 sec)
  3. Records: 0  Duplicates: 0  Warnings: 0
  4.  
  5. mysql> INSERT INTO tabla VALUES (null, 'cuatro'), (null, 'cinco');
  6. Query OK, 2 rows affected (0.13 sec)
  7. Records: 2  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM tabla;
  10. +-----+-------------+
  11. | id  | descripcion |
  12. +-----+-------------+
  13. |   1 | uno         |
  14. |   2 | dos         |
  15. |   3 | tres        |
  16. | 100 | cien        |
  17. | 101 | ciento uno  |
  18. | 102 | cuatro      |
  19. | 103 | cinco       |
  20. +-----+-------------+
  21. 7 rows in set (0.01 sec)

¿Qué tendrías que hacer? eliminar primero los registros que tengan un id mayor al que quieres cambiar y entonces si hacer el ALTER TABLE:

Código MySQL:
Ver original
  1. mysql> DELETE FROM TABLA WHERE ID > 3;
  2. Query OK, 4 rows affected (0.20 sec)
  3.  
  4. mysql> ALTER TABLE tabla AUTO_INCREMENT=4;
  5. Query OK, 0 rows affected (0.08 sec)
  6. Records: 0  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> INSERT INTO tabla VALUES (null, 'cuatro'), (null, 'cinco');
  9. Query OK, 2 rows affected (0.06 sec)
  10. Records: 2  Duplicates: 0  Warnings: 0
  11.  
  12. mysql> SELECT * FROM tabla;
  13. +----+-------------+
  14. | id | descripcion |
  15. +----+-------------+
  16. |  1 | uno         |
  17. |  2 | dos         |
  18. |  3 | tres        |
  19. |  4 | cuatro      |
  20. |  5 | cinco       |
  21. +----+-------------+
  22. 5 rows in set (0.00 sec)

Insisto, no hay ningún beneficio en hacer algo como esto, ni veo razón para que lo hagas.

Saludos
Leo