Entrada duplicada '<valor>' para la clave '<índice>'
Un script intentó guardar algo que ya existe, normalmente un jugador que se añade dos veces.
Haz esto primero
Si pasa en cada entrada, el script inserta sin comprobar antes. Repórtalo al autor.
Qué significa
Un INSERT intentó escribir un valor que una clave UNIQUE o PRIMARY ya tiene. MySQL rechazó la sentencia entera. El mensaje nombra el valor y el índice con el que chocó, y entre los dos identifican la fila.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
Insertar a un jugador que ya existe
Un manejador de
playerConnectingo de primera entrada que inserta sin condiciones. Segunda entrada, mismo identificador, colisión. - 2
Un manejador registrado dos veces
El mismo evento atado en dos archivos, o un recurso reiniciado sin que su manejador se limpiara, así que cada acción se ejecuta dos veces.
- 3
Un reintento tras un tiempo agotado que en realidad funcionó
El primer insert funcionó y la respuesta se perdió; el reintento choca.
- 4
Dos servidores sobre una sola base de datos
Un equipo de desarrollo y uno en vivo compartiendo credenciales.
- 5
Un id generado del lado del cliente
Cualquier cosa que el cliente aporte como clave primaria se va a repetir tarde o temprano.
Cómo saber cuál es el tuyo
Buscá la fila que ya está:
SELECT * FROM users WHERE identifier = 'el-valor-del-mensaje';
Si parece un jugador legítimo que ya existía, el insert no debería haberse ejecutado nunca. Si es un duplicado de una fila creada hace segundos, estás insertando dos veces.
Dónde mirar
El INSERT del recurso, y si algo comprueba primero que exista.
Cómo arreglarlo
Decí qué debería pasar en una colisión en vez de dejar que dé error:
-- conservar la fila que ya está, no hacer nada INSERT IGNORE INTO users (identifier, name) VALUES (?, ?) -- o actualizarla INSERT INTO users (identifier, name) VALUES (?, ?) ON DUPLICATE KEY UPDATE name = VALUES(name)
¿Sigues atascado en tu propio código?
Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.
bug_reportAbrir el Server FixerPara este tipo de error, el Script Optimizer detecta los patrones de consulta que causan esto.