Esta pregunta se ha hecho en un número de diferentes sabores de antes, pero las respuestas suministradas en esos casos, por lo que no se acercan a ayudarme a resolver mi problema.

Estamos ejecutando MySQL versión «5.0.41-comunidad-log de MySQL Community Edition (GPL)»
La tabla en cuestión es descrito como esta (he eliminado la mayor parte de la definición de la tabla por razones de negocios):

 Field      Type          Null     Key     Default     Extra          
 ---------  ------------  -------  ------  ----------  -------------- 
 id         bigint(20)    NO       PRI     (null)      auto_increment 
 ...
 extracted  tinyint(1)    YES              (null)                     

Cuando ejecuto la actualización de la instrucción SQL:

UPDATE transaction_tbl SET extracted = 1 WHERE id = 4289

Me sale el error:

ERROR 1062 (23000): Duplicate entry '4289' for key 1

ejecutando la siguiente instrucción select:

SELECT id, extracted FROM transaction_tbl WHERE id BETWEEN 4288 AND 4290

produce esto:

 id     extracted   
 -----  ------------ 
 4288   0                
 4289   0                
 4290   0                

Que he leído en los lugares sobre el uso de la REPARACIÓN sobre la mesa, pero recibí una respuesta de que «El motor de almacenamiento para la tabla no admite reparación»

Estoy en un poco de una pérdida. Si alguien me puede ayudar. Me encanta saber cómo solucionar este problema de una manera que no requiere de mí para destruir los datos.

  • existen factores desencadenantes en esta tabla?
  • Usted puede encontrar el gatillo con SHOW TRIGGERS LIKE 'transaction_tbl'
  • Hay uno, pero hemos estado recibiendo este error desde antes de que el detonante fue creado. Yo debería haber mencionado que en la pregunta.
  • OK hay otro trigger que yo no era consciente de : a) uno de ustedes quieren escribir la respuesta?
  • Si esto sucede a este registro, intente eliminar y volver a crear ese registro hasta que no hay filas están afectados más. DELETE FROM transaction_tbl WHERE id = 4289. Si eso no ayuda, tal vez recreando el PK (+ índice) no.
InformationsquelleAutor Ron Tuffin | 2011-08-18

2 Comentarios

  1. 1

    Como lo menciona @rabudde y @Eljakim en la sección de comentarios de la pregunta, este problema fue, en mi caso, siendo causado por las acciones de un gatillo.

    El gatillo estaba tratando de insertar un registro en otra tabla y que insertar estaba fallando a causa de una clave duplicada problema.

    uso SHOW TRIGGERS LIKE 'transaction_tbl' (en mi caso) para encontrar todos los disparadores que actúa sobre la mesa y a partir de ahí es un poco de trabajo de pies para descubrir que el gatillo está siendo malo.

    Finalmente he tenido que modificar el gatillo para realizar sólo la inserte en el caso de que no se registre no estaba en la tabla de destino y hacer una actualización, si ella estaba allí.

  2. 0

    Esta tabla tiene Innodb no se puede utilizar la reparación(sólo para MyIsam).
    Para recuperar la tabla InnoDb debe ejecutar

    Alter table transaction_tbl Engine=Innodb;

    o reiniciar el servidor.

    Para la comprobación de la tabla de estado trate de usar:

    SHOW TABLE STATUS LIKE 'transaction_tbl'

Dejar respuesta

Please enter your comment!
Please enter your name here