Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/01/2012, 15:18
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: Error Al Cambiar Campo "pid"

Hola southern:

El campo pid lo tienes definido como llave única, el error creo que es muy claro, estás tratando de asignar un pid = 1391 a un registro, cuando en la tabla ya existe otro registro con ese mismo valor.

Hay que tener mucho cuidado al cambiar los campos llaves de las tablas, pues si existen referencias foráneas estas podrían acarrear pérdida de integridad. En todo caso te recomendaría agregar un campo orden el cual no sea llave y donde puedas asignar cualquier orden de manera libre. Si insistes en hacer la actualización de tu campo llave, tendrías que hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE Tabla(id INT(11) UNSIGNED NOT NULL,
  2.     -> descripcion VARCHAR(15) NOT NULL,
  3.     -> PRIMARY KEY (id));
  4. Query OK, 0 rows affected (0.19 sec)
  5.  
  6. mysql> INSERT INTO Tabla VALUES (1, 'uno'), (2, 'tres'), (3, 'dos');
  7. Query OK, 3 rows affected (0.05 sec)
  8. Records: 3  Duplicates: 0  Warnings: 0
  9.  
  10. mysql> SELECT * FROM Tabla;
  11. +----+-------------+
  12. | id | descripcion |
  13. +----+-------------+
  14. |  1 | uno         |
  15. |  2 | tres        |
  16. |  3 | dos         |
  17. +----+-------------+
  18. 3 rows in set (0.00 sec)
  19.  
  20. mysql> #Trato de actualizar el id = 3 y dejarlo como 2
  21. mysql> UPDATE Tabla SET id = 2 WHERE id = 3;
  22. ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'
  23. mysql> #Para poder hacer la actualización hago lo siguiente:
  24.  
  25. mysql> #Primero. Asigno una llave arbitraria al registro con la llave duplicada
  26. mysql> UPDATE Tabla SET id = 9999 WHERE id = 2;
  27. Query OK, 1 row affected (0.03 sec)
  28. Rows matched: 1  Changed: 1  Warnings: 0
  29.  
  30. mysql> #Segundo. Realizo la actualización como lo intenté hacer al inicio
  31. mysql> UPDATE Tabla SET id = 2 WHERE id = 3;
  32. Query OK, 1 row affected (0.07 sec)
  33. Rows matched: 1  Changed: 1  Warnings: 0
  34.  
  35. mysql> #tercero. Asigno la llave que tenía el registro anterior al id=9999
  36. mysql> UPDATE Tabla SET id = 3 WHERE id = 9999;
  37. Query OK, 1 row affected (0.04 sec)
  38. Rows matched: 1  Changed: 1  Warnings: 0
  39.  
  40. mysql> SELECT * FROM Tabla;
  41. +----+-------------+
  42. | id | descripcion |
  43. +----+-------------+
  44. |  1 | uno         |
  45. |  2 | dos         |
  46. |  3 | tres        |
  47. +----+-------------+
  48. 3 rows in set (0.00 sec)

Observa que si no marcara el error de duplicado y te permitiera hacer la consulta directa, la tabla quedaría así

Código MySQL:
Ver original
  1. +----+-------------+
  2. | id | descripcion |
  3. +----+-------------+
  4. |  1 | uno         |
  5. |  2 | dos         |
  6. |  2 | tres        |
  7. +----+-------------+

Lo cual es un error. Dale un vistazo y nos comentas

Saludos
Leo.