2009-12-03 1 views
0

일대 다 관계의 간단한 스키마를 고려하십시오. 부모 테이블의 ID는 하위 테이블에서 참조됩니다.PHP - 자동 증가 값 삽입 - 부모/자식 테이블 용 - 동시성 문제

PHP에서 문 mysql_query($query)을 사용하여 테이블에 행을 삽입하고 싶습니다. 그런 다음 mysql_insert_id()을 사용하여 마지막으로 삽입 된 행의 ID를 가져옵니다. 그런 다음이 ID를 사용하여 다른 행을 하위 테이블에 삽입합니다.

제 질문은 PHP 페이지에서 같은 시간에 여러 요청이 발생할 수 있기 때문에 위의 두 명령문이 차례대로 실행되지 않으면 어떻게됩니까? (예를 들어, 두 개의 삽입이 일어나는 경우) 부모와 자식에 대한 두 개의 삽입물)? 동시성 문제가있을 수 있습니다. 그러면 우리는 어떻게 이것을 극복 할 수 있습니까?

아이디어가 있으십니까?

+0

mysql_insert_id()를 사용하는 것이 좋습니다. – wenbert

+0

어떻게 확신 할 수 있습니까? 어떤 링크? –

답변

2

로 :에 mysql_insert_id의

값은() 현재의 클라이언트 연결에서 을 실행 한 명령문에 의해서만 영향을 입니다. 다른 클라이언트가 발행 한 문 의 영향을받지 않습니다.

그래서 ... 문제 없습니다. 다른 이유로 ORM (Doctrine과 같은)을 사용하는 것이 좋습니다.

+0

http://dev.mysql.com/doc/refman/5.0/es/mysql-insert-id.html –

+0

그래서 모든 ORM (Hibernate, Entity Framework (.net) 등)이이 문제를 처리한다는 것을 의미합니다. 자체? –

+0

나는 그들 모두에 대해 잘 모르겠다. 그러나 나는 대부분을 생각한다. 우선, save 프로세스는 종종 ORM에서 일괄 처리 (예 : 개체 트리를 만든 다음 저장)하여 ID를 어떻게 든 처리해야합니다. 자세한 내용은 각 매뉴얼을 참조하십시오. :) –

3

mysql_insert_id()을 호출하면 해당 연결에 대해 마지막으로 삽입 된 ID 이 나오므로 두 개의 PHP 스크립트가 서로 간섭하지 않습니다. MySQL의 문서에