2012-06-10 3 views
0

복합 기본 키가 (id_a, id_b) 인 데이터베이스 테이블이 있습니다. 그건 그들이 실제로 부르는 것이 아니지만이 질문에 대해 단순화하고 있습니다. id_a은 외래 키이고 id_b은 정수로, "시퀀스 번호"라고 말합니다. id_b auto_incrementing은 InnoDB 스토리지 엔진에 허용되지 않기 때문에 (복합 키의 첫 번째 필드가 아니기 때문에) 만들 수는 없습니다.SQLAlchemy가있는 다중 열 키

id_a id_b 
---------------- 
1  1 
1  2 
2  1 
2  2 
2  3 

및 (id_a=1)과 행을 삽입의 결과가 자동 id_b=3 설정한다 : 이러한 개체 id_a로 "분류"할 수 있도록, 예를 들면, 그래서 그것을 확인하고자

. 다른 id_a 동시 삽입이 완전히 허용되어야 할 때 전체 테이블을 잠글 필요가 없으므로 데이터베이스 잠금을 사용하지 않는 것이 좋습니다.

SQLAlchemy (ORM 사용)를 통해 Python을 통해이 데이터베이스에 액세스하고 있습니다.이 질문은 클라이언트 측 (순수 MySQL)과 관련하여 까다로울 수 있습니다.

답변

1

SELECT coalesce(max(ID_B),0)+1 FROM yourTable WHERE ID_A = '1'

그러나, 잠금없이, 당신은 당신이 삽입 문에 중복 키 오류를 처리해야 할 것이다, 그래서 중복 ID_B 값을 얻기의 위험을 실행합니다. 지정된 횟수만큼 자동으로 코드 내에서 "다시 시도"하거나 오류를 다시 시도하십시오.