THE ORB
Arrancando el studio

Entrada duplicada '<valor>' para la clave '<índice>'

Un script intentó guardar algo que ya existe, normalmente un jugador que se añade dos veces.

groupsNo se guarda nada de ese jugadorcodeNecesita un desarrollador

Haz esto primero

Si pasa en cada entrada, el script inserta sin comprobar antes. Repórtalo al autor.

bug_reportMejor pega tu consola entera

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. 1

    Insertar a un jugador que ya existe

    Un manejador de playerConnecting o de primera entrada que inserta sin condiciones. Segunda entrada, mismo identificador, colisión.

  2. 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. 3

    Un reintento tras un tiempo agotado que en realidad funcionó

    El primer insert funcionó y la respuesta se perdió; el reintento choca.

  4. 4

    Dos servidores sobre una sola base de datos

    Un equipo de desarrollo y uno en vivo compartiendo credenciales.

  5. 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 Fixer

Para este tipo de error, el Script Optimizer detecta los patrones de consulta que causan esto.

Errores que viajan con este