Mysql, Auto_increment 유형 ID 필드가 테이블의 기본 키로 사용 하 고 그것은 다른 테이블에 외래 키로 데이터베이스 디자인에서 일반적인 사용은 "마스터-슬레이브 테이블 구조" 형성 한다. 하지만 Id 생성에 관해서, 우리가 일반적으로이 작업을 수행 하 여 기본 테이블에서 레코드를 삽입 후 그것을 기반으로 테이블에서 레코드를 삽입 하려면 자동으로 생성 된 ID. 여기에 하나의 어려움은 기록 된 후 기본 테이블의 ID를 얻을 하는 방법. 일반적인 관행 "tablename에서 최대 (ID)를 선택" 접근 방식을 통해 이지만 그것은 분명이 접근에서는 동시성, "X-잠금" 트랜잭션에서 기본 테이블 필요 고려해 야 다음 후 그것은 최대 (ID)의 값을 잠금 해제. 이 방법은 단계, 약간의 문제, 및 나쁜 동시성을 많이 필요합니다. 어떤 더 간단한 접근은? 한 응답은 선택 (last_insert_id)이이 작업을 것 이다. 첫번째 섬광에, 그것은 같은 선택 최대 (ID), 보이지만 실제로 스레드 안전. 이 데이터베이스 연결에 다는 것을 의미 합니다. 다음 실험은 보여준다:
1. 테이블 A, 1 연결에 레코드를 삽입 하 고 Auto_increment 형식의 필드를 포함 하는 테이블.
2. 연결 2 a. 테이블에 레코드 삽입
3. 결과: 연결 1의에서 선택 last_insert_id ()를 실행 하는 결과가 연결 2, 선택 last_insert_id () 실행의 결과에서 그리고 다른 두 개의 연결의 선택 최대 (ID)를 실행 결과 동일.
사실, MSSQL에서 scope_identity ()와 Ident_current ()의 차이점은 여기 비슷한. Scope_identity를 사용 하 여 ()를 사용 하면 있는 identity 필드 삽입 됩니다, 현재 세션의 값을 가져올 수 그리고 다른 세션의 구별 없이 정체성 필드에 삽입 되는 최대 값을 얻는다 Ident_current ()를 사용 하 여.
참고: 선택 LAST_INSERT_ID ()를 사용 하 여 유의 한 번에 여러 레코드를 삽입 하는 때 단지 당신은 처음으로 삽입 한 ID 값을 반드시! 시도할 수 있습니다.
TB (C1, C2) 값 (C1value, c2value)에 삽입 (c1value1, c2value2)...