inv
에는 ID
, num
및 state
의 3 개의 열이 있습니다.
state
의 값은 0 = 사용되지 않음, 1 = 사용됨, 2 = 예약 됨입니다.mySQL : 하나의 쿼리에서 SELECT 및 UPDATE를 처리합니까?
SELECT num FROM inv WHERE state = 0
쿼리가 내가 기록을 업데이트해야하고 예약 된 2 =로 state
를 설정 한 num
를 반환
다음 사용하지 않는 num
내가이 쿼리를 사용 얻으려면.
UPDATE inv SET state = 2 Where ID = id
나는 하나의 쿼리에서만이를 수행하는 방법을 알고 있지만 어떻게해야합니까?
어떤 도움이 대답은 감사
편집 :
내가 이것을 실현하려 노력하고 있어요 :
I 고유 번호 송장을 생성해야합니다. 그래서 다음 free, unused number whith state = 0을 가져온 다음이 숫자를 반환하고 같은 쿼리에서 반환 된 레코드를 state = 2로 설정하므로 아무도 다른 레코드를 사용하지 않습니다. 나중에 완벽한 인보이스 생성에 성공하면이 레코드를 상태 = 1 (사용됨)로 업데이트합니다. 인보이스를 완벽하게 생성 할 수없는 경우에는 상태를 0 = 사용하지 않음으로 다시 설정합니다.
희망을 좀 더 명확하게 표현할 수 있기를 바랍니다.
왜 사용하지 (WHERE 상태 = 0 inv_2에서 ID를 선택)? 그것은 훨씬 쉬울 수 있습니다. 당신은 찾을 수 있습니다 [여기] (http://stackoverflow.com/questions/5528854/usage-of-mysqls-if-exists) 또는 where 절에 포함시키지 않는 이유. – bipartite
가장 좋은 방법은 num을 가져 와서 업데이트하고 반환하는 저장 프로 시저를 사용하는 것입니다.하지만 경쟁 조건도 따라야하므로 동시성에주의해야합니다. 데이터베이스의 현재 상태보다는 해결하려고하는 문제에 대해 설명하는 것이 더 나을 것입니다. –
위의 수정 사항을 참조하십시오. -1 무엇을 위해? – Ben