2011-08-18 2 views
2

이 질문은 이전에 여러 가지 다른 맛으로 질문되었지만 이러한 경우 제공된 대답이 내 문제를 해결하는 데 도움이되지 않았습니다. 우리는 실행중인왜 "ERROR 1062 (23000) : 중복 항목 '4289'키 1을 업데이트합니까?

MySQL 버전 "5.0.41 - 커뮤니티 - 로그의 MySQL 커뮤니티 에디션 (GPL)" 문제의 테이블 (I 사업상의 이유로 테이블 정의의 대부분을 제거했다)과 같이 설명 :

내가 업데이트 SQL 문을 실행하면
Field  Type   Null  Key  Default  Extra   
--------- ------------ ------- ------ ---------- -------------- 
id   bigint(20) NO  PRI  (null)  auto_increment 
... 
extracted tinyint(1) YES    (null)      

는 :

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

UPDATE transaction_tbl SET extracted = 1 WHERE id = 4289 

나는 오류 이 select 문 실행

: 나는 테이블에 수리를 사용하는 방법에 대한 장소에서 읽을 수 있지만 테이블의 스토리지 엔진은하지 않습니다 "라는 응답을받은

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

:

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

이 생산 지원 수리 "

나는 약간의 손실이 있습니다. 누구든지 나를 도울 수 있다면. 나는 데이터를 파괴 할 필요가없는 방식으로이 문제를 해결하는 방법을 알고 싶다.

+0

이 테이블에 트리거가 있습니까? – rabudde

+0

당신은 'SHOW TRIGGERS LIKE'와 같은 트리거를 찾을 수 있습니다. transaction_tbl'' – Eljakim

+0

트리거가 생성되기 전에이 에러가 발생하고 있습니다. 나는 그 질문에서 언급 했어야했다. –

답변

1

를 사용하려고,이 문제는, 내 경우에는,에 의해 발생되고 있었다 방아쇠의 행동.

트리거가 레코드를 다른 테이블에 삽입하려고했는데 중복 키 문제로 인해 삽입에 실패했습니다.

SHOW TRIGGERS LIKE 'transaction_tbl' (내 경우에는) 테이블에 작용하는 모든 트리거를 찾아 거기에서 어떤 트리거가 나쁜지를 발견하기위한 보법입니다.

궁극적으로 레코드가 대상 테이블에없는 경우 삽입을 수행하고 거기에있는 경우 업데이트를 수행하도록 트리거를 수정해야했습니다.

0

이 테이블에는 수리를 사용할 수없는 Innodb가 있습니다 (MyIsam에만 해당). 복구 InnoDb 테이블의 경우

Alter table transaction_tbl Engine=Innodb; 

을 실행하거나 서버를 다시 시작해야합니다.

테이블 상태를 확인 테이블 표시 STATUS LIKE 'transaction_tbl'질문의 코멘트 섹션에서 @rabudde 및 @Eljakim에서 언급 한 바와 같이