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

Truncate table sin eliminar informacion

Estas en el tema de Truncate table sin eliminar informacion en el foro de Mysql en Foros del Web. Algo que nunca he visto o al menos no recuerdo es una función en sql -- mysql en particular --- es la opción de reiniciar ...
  #1 (permalink)  
Antiguo 16/06/2015, 17:10
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Truncate table sin eliminar informacion

Algo que nunca he visto o al menos no recuerdo es una función en sql -- mysql en particular --- es la opción de reiniciar los ID de un campo autonómico como las claves/index de una tabla.

Veran tengo una tabla en la que por X circunstancias tengo filas del 1 al 100 y para nuevos contenidos el index arranca desde del 6000, a raíz de esto han surgido algunos problemas... por lo que me gustaría resetear ese valor para que los nuevos contenidos inicien en el 101 y no se dispare hasta las nubes.


Alguien tendrá un truco para hacerlo fácil y rápido? vamos que en este momento me estoy planteando exportar y volver a importar estos contenidos... pero sera algo engorroso.
  #2 (permalink)  
Antiguo 17/06/2015, 08:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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
  #3 (permalink)  
Antiguo 17/06/2015, 09:50
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: Truncate table sin eliminar informacion

Te soy franco y tampoco entiendo mucho del problema... lo que se esta realizando es la importacion de un archivo CSV con casi 7000 lineas, durante las primeras importaciones se procesaba todo OK.

Sin embargo por X circunstancias se tuvieron que eliminar los datos importados y al tratar de volver a importar arrojaba error tras error.... devolví todo a como se tenia originalmente y sigue igual lo único que me falta probar es reiniciando los indices.... si no tendré que empezar con un backup algo antiguo.

Voy a probar y te comento, gracias!

Etiquetas: campo, informacion, sql, tabla, table
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 07:39.