2011-12-15 2 views
0

데이터를 둘 이상의 테이블에 삽입하고 마지막으로 삽입 한 ID를 가져 와서 다른 테이블에 저장하는 저장 프로 시저에서 작업하고있었습니다. 나는 어떤 가능한 해결 방법이 문제에 대한 있는가 문제에 붙어LAST_INSERT_ID로 실현 된 MySql 버그가 해결 방법이 필요합니다.

reference

의 MySQL 5.0.24에서 LAST_INSERT_ID 버그 관련 해요?

예 : 에이전트가 삽입받을 때

// if agent is new one 

INSERT INTO `agent`(`agn_name`, `agn_cus_id`) VALUES (agentName, customerId); 
SET agnId = LAST_INSERT_ID(); 

//else get agnId = existing one 

INSERT INTO `order`(`orderno`, `description`, `agent`) VALUES (orderNo, description,  agnId); 

SET orderId = LAST_INSERT_ID(); 

INSERT INTO `suborder1`(`orderid`, `description`) VALUES(orderId, subdescription1); 

INSERT INTO `suborder2`(`orderid`, `description`) VALUES(orderId, subdescription2); 

문제는, ORDERID는

+0

당신은 그 버그 5 년 전에 폐쇄되었다 알고

나는 의사 코드의 일종이 서면으로 작성했습니다? 얼마나 오래 DB를 사용하고 있습니까? –

+0

일부 코드, 현재 데이터 및 예상 데이터를 게시하십시오. – Nonym

+0

@Brian 예 데이터베이스가 너무 오래되었습니다. 하지만 지금은 업데이트 할 수 없습니다. 그래서 가능한 해결책을 찾고 있습니다. – Prazanna

답변

3

은 기본적으로 당신이 새로 삽입 된 행에서 주문 ID를 얻기의 몇 가지 방법을 찾아야 어느 타임 스탬프 (그래서 테이블을 잠글 에이전트 테이블에서 ID를 가져옵니다 이것이 테이블에있는 가장 새로운 행임을 확신 할 수 있습니다). 이 경우에는 에이전트가 방금 생성되어 다른 순서를 일찍 추가 할 수 없으므로이 에이전트에 대해 하나의 행만있을 수 있다는 사실을 사용하면 문제가 없습니다.

if (agent is new one) { 
    INSERT INTO agent(agn_name, agn_cus_id) VALUES (agentName, customerId); 
    SET agnId = LAST_INSERT_ID(); 
    INSERT INTO order(orderno, description, agent) VALUES (orderNo, description, agnId); 
    -- there can only be one row in order for this new agent, as the agent was just created 
    SET orderId = SELECT orderId FROM order WHERE agent = agnId; 
} 
else { 
    SET agnId = <some existing value>; 
    INSERT INTO order (orderno, description, agent) VALUES (orderNo, description, agnId); 
    -- this is the first call to LAST_INSERT_ID() since the agent wasn't created 
    SET orderId = LAST_INSERT_ID(); 
} 
+0

고마워요. 나는 그것이 효과가 있어야한다고 생각한다. – Prazanna

관련 문제