Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/03/2012, 10:24
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con MYSQL

Hola ameno123:

Vayamos por partes... en primer lugar, para cambiar de tipo de dato de tu tabla lo harías con un ALTER TABLE, más o menos así.

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla(
  2.     -> campo VARCHAR(20) NOT NULL,
  3.     -> PRIMARY KEY (id));
  4. Query OK, 0 rows affected (0.16 sec)
  5.  
  6. mysql> DESC tabla;
  7. +-------+----------------------+------+-----+---------+----------------+
  8. | Field | Type                 | Null | Key | Default | Extra          |
  9. +-------+----------------------+------+-----+---------+----------------+
  10. | id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
  11. | campo | varchar(20)          | NO   |     | NULL    |                |
  12. +-------+----------------------+------+-----+---------+----------------+
  13. 2 rows in set (0.03 sec)
  14.  
  15. mysql> #Para cambiar el tipo de la columna ID, de SMALLINT a INT
  16. mysql> ALTER TABLE tabla
  17. Query OK, 0 rows affected (0.39 sec)
  18. Records: 0  Duplicates: 0  Warnings: 0
  19.  
  20. mysql> DESC tabla;
  21. +-------+------------------+------+-----+---------+----------------+
  22. | Field | Type             | Null | Key | Default | Extra          |
  23. +-------+------------------+------+-----+---------+----------------+
  24. | id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
  25. | campo | varchar(20)      | NO   |     | NULL    |                |
  26. +-------+------------------+------+-----+---------+----------------+
  27. 2 rows in set (0.03 sec)

Ahora bien, el problema con el INSERT es QUE NO LE ESTÁS ASIGNANDO NINGÚN VALOR AL CAMPO ID, si lo estás recuperando de algún parámetro en tu página es posible que el parámetro le esté llegando como una cadena vacía. Sin embargo NO ES RECOMENDABLE ASIGNARLES VALORES A CAMPOS AUTOINCREMENTALES, es preferible simplemente omitir este campo en el insert o en su defecto enviar siempre un NULL. Observa las diferentes formas en que puedes insertar datos en la tabla:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla (id, campo) VALUES (1, 'uno');
  2. Query OK, 1 row affected (0.28 sec)
  3.  
  4. mysql> INSERT INTO tabla (id, campo) VALUES (NULL, 'dos');
  5. Query OK, 1 row affected (0.11 sec)
  6.  
  7. mysql> INSERT INTO tabla (campo) VALUES ('tres');
  8. Query OK, 1 row affected (0.13 sec)
  9.  
  10. mysql> INSERT INTO tabla VALUES (4, 'cuatro');
  11. Query OK, 1 row affected (0.09 sec)
  12.  
  13. mysql> INSERT INTO tabla VALUES (NULL, 'cinco');
  14. Query OK, 1 row affected (0.06 sec)
  15.  
  16. mysql> SELECT * FROM tabla;
  17. +----+--------+
  18. | id | campo  |
  19. +----+--------+
  20. |  1 | uno    |
  21. |  2 | dos    |
  22. |  3 | tres   |
  23. |  4 | cuatro |
  24. |  5 | cinco  |
  25. +----+--------+
  26. 5 rows in set (0.03 sec)

El problema al asignar un valor fijo a un campo ID (como en los ejemplos 1 y 4) es que si el valor ya existe en la BD te marque un problema de duplicados:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla VALUES (4, 'otro cuatro');
  2. ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'

En lo particular prefiero utilizar la forma del ejemplo tres, donde se listan los campos que quieres insertar PERO SE OMITEN LOS CAMPOS INCREMENTALES

Saludos
Leo.