Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/05/2012, 09:11
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: Evitar AUTOINCREMENT

Hola anrodse:

Tu puedes enviar en cualquier momento el ID que quieres colocar... si no envías el parámetro entonces se genera de manera automática. Observa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla (id INT AUTO_INCREMENT,
  2.   -> descripcion VARCHAR(10), PRIMARY KEY (id));
  3. Query OK, 0 rows affected (0.09 sec)
  4.  
  5. mysql> #ENVIANDO NULL
  6. mysql> INSERT INTO tabla VALUES (NULL, 'uno');
  7. Query OK, 1 row affected (0.03 sec)
  8.  
  9. mysql> SELECT * FROM tabla;
  10. +----+-------------+
  11. | id | descripcion |
  12. +----+-------------+
  13. |  1 | uno         |
  14. +----+-------------+
  15. 1 row in set (0.00 sec)
  16.  
  17. mysql> #ENVIANDO SOLO LOS CAMPOS NECESARIOS
  18. mysql> INSERT INTO tabla (descripcion) VALUES ('dos');
  19. Query OK, 1 row affected (0.05 sec)
  20.  
  21. mysql> SELECT * FROM tabla;
  22. +----+-------------+
  23. | id | descripcion |
  24. +----+-------------+
  25. |  1 | uno         |
  26. |  2 | dos         |
  27. +----+-------------+
  28. 2 rows in set (0.00 sec)
  29.  
  30. mysql> #ASIGNANDO EL ID DE MANERA DIRECTA
  31. mysql> INSERT INTO tabla VALUES (4, 'tres');
  32. Query OK, 1 row affected (0.01 sec)
  33.  
  34. mysql> SELECT * FROM tabla;
  35. +----+-------------+
  36. | id | descripcion |
  37. +----+-------------+
  38. |  1 | uno         |
  39. |  2 | dos         |
  40. |  4 | tres        |
  41. +----+-------------+
  42. 3 rows in set (0.00 sec)

Observa que en los dos primeros casos no se envía un valor para el campo ID, por lo tanto se asigna de manera automática. En el tercer caso SI SE ENVÍA UN VALOR DE ID DIRECTO, Sin embargo creo que te puedes dar cuenta del riesgo que corres al hacerlo de esta manera:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla VALUES (4, 'cuatro');
  2. ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
  3. mysql> SELECT * FROM tabla;
  4. +----+-------------+
  5. | id | descripcion |
  6. +----+-------------+
  7. |  1 | uno         |
  8. |  2 | dos         |
  9. |  4 | tres        |
  10. +----+-------------+
  11. 3 rows in set (0.00 sec)

Si el id que quieres asignar YA EXISTE en la tabla entonces tendrás un error de llave duplicada. Aquí se hace entonces necesario que nos dijeras ¿QUÉ UTILIDAD LE VEZ EN ASIGNAR LA LLAVE DE MANERA DIRECTA Y NO DE MANERA AUTOMÁTICA?.

Espero sinceramente que no me vayas a decir que para evitar "saltos" en los id's cuando se elimina alguna entrada .

Saludos
Leo.