하고 거래는 사용자 정의 유형의 오류를 기대하는 것입니다거래 코드를 작성하는 적절한 방법은 무엇입니까? 여러 스레드 또는 프로세스와 동일한 데이터베이스 및 테이블에서
잠금 대기 제한 시간을 초과; MySQL의에서 오는
거래
를 다시 시작하려고?이 작업은 값 비싼 작업으로 인해 블로킹의 경우처럼 교착 상태를 나타내지 않습니다. 나는 내가 PK의 배치를 할당하는 대신에 의해 많은 스레드에서 삭제를 분리 빠를 이러한 테이블에서 삭제하고 싶었 더 컨텍스트를 들어
BEGIN
DELETE FROM TableA where pk = X
DELETE FROM TableC where colA = X
DELETE FROM TableD where colA = X
DELETE FROM TableE where colA = X
DELETE FROM TableF where colA = X
COMMIT
: 내 경우
나는 다음과 같은 코드 구조 발견 순차적으로 단일 스레드를 통해 수행합니다. 근본적으로 내가 말할 수있는 한 교착 상태가 될 수 없다. (내가 틀렸다면 나를 교정 해주세요).
그래서 내가 생각하는 문제는 스레드 중 하나가 너무 오랫동안 삭제를 시도하여 차단되었다는 것입니다.
응용 프로그램 수준에서이 사건을 어떻게 처리해야하는지 (오류 msg에 따르면) 것 같습니다.
그래서 내 질문은 : 트랜잭션을 수행하는 코드를 작성할 때 하나는 일반적으로 이러한 오류를 기대 예를 들면 몇 초 동안 기다리과 거래를 몇 번을 다시 시도 할 필요가 다음 아마도 포기합니까?
이것이 트랜잭션에 대해 일반적으로 코드화하는 방법인지 확실하지 않습니다.
(참고 : 기본 설정 언어이므로 자바 질문이 아니지만 자바로 태그를 지정하고 있습니다.)
외래 키와 계단식 삭제를 사용하지 않는 이유가 있습니까? –
@ X.L.Ant : 그것은 현재의 디자인이며 변경할 수 없습니다. 계단식 삭제도 "긴"작업이기 때문에 동일한 문제가 발생한다고 생각하겠습니다. – Jim
예, 동의합니다. 호기심에서 벗어났습니다. –