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 originalQuery OK, 0 rows affected (0.19 sec)
Query OK, 3 rows affected (0.05 sec)
+----+-------------+
| id | descripcion |
+----+-------------+
| 1 | uno |
| 2 | tres |
| 3 | dos |
+----+-------------+
mysql> #Trato de actualizar el id = 3 y dejarlo como 2
ERROR
1062 (23000): Duplicate entry
'2' for
key 'PRIMARY'mysql> #Para poder hacer la actualización hago lo siguiente:
mysql> #Primero. Asigno una llave arbitraria al registro con la llave duplicada
Query OK, 1 row affected (0.03 sec)
mysql> #Segundo. Realizo la actualización como lo intenté hacer al inicio
Query OK, 1 row affected (0.07 sec)
mysql> #tercero. Asigno la llave que tenía el registro anterior al id=9999
Query OK, 1 row affected (0.04 sec)
+----+-------------+
| id | descripcion |
+----+-------------+
| 1 | uno |
| 2 | dos |
| 3 | tres |
+----+-------------+
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+----+-------------+
| id | descripcion |
+----+-------------+
| 1 | uno |
| 2 | dos |
| 2 | tres |
+----+-------------+
Lo cual es un error. Dale un vistazo y nos comentas
Saludos
Leo.