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

Error Al Cambiar Campo "pid"

Estas en el tema de Error Al Cambiar Campo "pid" en el foro de Mysql en Foros del Web. Buenas, tengo un pequeño problema haciendo un cambio del valor del campo "pid", que se utiliza para ordenar las fotos, entre varias de ellas. El ...
  #1 (permalink)  
Antiguo 11/01/2012, 14:53
Avatar de southern  
Fecha de Ingreso: abril-2010
Ubicación: Madrid <=> Lanzarote
Mensajes: 44
Antigüedad: 14 años
Puntos: 5
Pregunta Error Al Cambiar Campo "pid"

Buenas, tengo un pequeño problema haciendo un cambio del valor del campo "pid", que se utiliza para ordenar las fotos, entre varias de ellas.

El caso es que cuatro fotos en cuestión, y quiero asignar el id de unas a otras para que aparezcan en el orden que quiero.

El problema es que me mysql me dice:

consulta SQL: Editar

UPDATE `cpg14x_pictures` SET `pid` = '1391' WHERE `pid` =2 LIMIT 1

MySQL ha dicho: Documentación
#1062 - Duplicate entry '1391' for key 1

¿Alguna idea de por qué pasa esto?

Muchas gracias de antemano ! Si no me he explicado bien puedo poner el orden inicial y el que quiero establecer.
__________________
De bien nacido es ser agradecido. Agradécelo si te ayudé :)
  #2 (permalink)  
Antiguo 11/01/2012, 15:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 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.

Etiquetas: Ninguno
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 12:43.