2008-10-03 3 views
8

mysql에서 자동 증가 할 때 삽입 작업에 사용되는 기본 키를 얻는 방법은 무엇입니까?기본 키와 삽입에 관한 쉬운 mysql 질문

기본적으로 문이 완료되면 새 자동 증가 값이 반환되기를 원합니다.

감사합니다.

+0

설명 : 코드에는 last_insert_id가 삽입됩니다. 이러한 진술의 두 거의 동시에 실행하고 간부 순서는 삽입 # 1 삽입 # 2 LAST_INSERT_ID # 1 완료로 바뀝니다 2 LAST_INSERT_ID # 2 완료 삽입 #에서 ID를 반환하고 삽입 #에서 ID를 반환 2 이 문제가 발생할 수 있습니까? – MPX

답변

12

설명 주석에 따르면 다른 동시 INSERT가 발생할 경우 LAST_INSERT_ID()가 잘못된 결과를 내지 않는지 확인하는 데 도움이됩니다. 다른 동시 작업에 관계없이 LAST_INSERT_ID()를 사용하는 것이 안전하다는 점에 안심하십시오. LAST_INSERT_ID()는 현재 세션에서 생성 된 가장 최근 ID 만 반환합니다. 각 두

  1. 열기 쉘 창을 실행 mysql을 클라이언트와 데이터베이스에 연결 :

    당신은 스스로를 시도 할 수 있습니다.

  2. 쉘 1 : AUTO_INCREMENT 키가있는 테이블에 INSERT합니다.
  3. 쉘 1 : SELECT LAST_INSERT_ID(), 결과 확인.
  4. 셸 2 : 같은 테이블에 INSERT하십시오.
  5. 쉘 (2)은() 쉘 1.
  6. 쉘 (1)에서 다른 결과를 참조 LAST_INSERT_ID을 선택 다시() LAST_INSERT_ID을 선택 이전 결과의 반복을 참조.

생각해 보면 이것이 유일한 방법입니다. 자동 증분 키 메커니즘을 지원하는 모든 데이터베이스는 이러한 방식으로 작동해야합니다. 결과가 다른 클라이언트와 경쟁 상태에 따라 INSERT하는 경우 현재 세션에서 마지막으로 삽입 된 ID 값을 가져올 신뢰할 수있는 방법이 없습니다.

+0

감사! 정확히 내가 원했던 것. – MPX

+0

@Bill Karwin thx이 유용한 게시물에 대해 많이 알려드립니다. 질문 : 다중 스레드 환경에서 사용할 수있는 마지막 자동 inc 키 값은 10이었습니다. 그러면 쉘 1의 스레드가 삽입되지 못하고 동시에 2 번 쉘이 삽입됩니다 .. last_insert_id()는 무엇이 될까요? 11 또는 12?thx a lot – shadesco

+0

@shadesco : MySQL 버전에 따라 다르지만, InnoDB를 사용하는 5.1 이후 버전에서는 첫 번째 세션이 auto-inc를 증가시키고 그 값은 손실됩니다. 그러면 두 번째 세션은 12가됩니다. http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html을 참조하십시오. –

6

. 나는 MySQL 녀석이 아니지만 이보다 조금 더 강건하게 마지막으로 완료된 작업에 대해 마지막으로 삽입 된 ID를 얻는 구체적인 방법이 있습니다. 당신이 테이블에 글을 쓰고 그것을 쿼리하는 사이에 삽입이 일어난다면 어떻게 될까요? 나는 그것이 많은 달 전에 나를 찌르었기 때문에 나는 알고있다 (그래서 그것은 일어난다). 그 밖의 모든 것이 실패하면 매뉴얼을 읽으십시오. http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

0

MySQL의 문서는 기능을 설명