* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Window7 32bit, Linux 64bit 등 |
|
9.2.12 |
|
[도움말]-[버전정보] 확인 |
|
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
Mybatis와 cubrid를 사용하고 있는데 auto increament에 관련하여 동시성 문제 질문이 있습니다.
BulkInsert 쿼리를 사용할 때 secret key로 키를 갖고오는 것이 아닌, BulkInsert이후에 select last_insert_id()를 조회하여
처음 insert된 id를 갖고오고 BulkInsert를 한 결과에 각각 ++ 연산을하면서 id 값을 넣고자 하는데요
- myisam table engine
- or innodb pre mysql v5.1
- or innodb with mysql v5.1 or newer and the
innodb_autoinc_lock_mode
is 0 or 1
위에 환경에서는 동시성 문제가 없다고하는데, cubrid에서도 동시성 문제가 없을 까요 ?
아래의 예제와 같이 처리 된다면, 동시성에 문제가 없을 것 같은데요.
1. 테이블 생성
CREATE TABLE auto_inc_tbl( id INTEGER AUTO_INCREMENT, col1 VARCHAR(100) ) ;
INSERT INTO auto_inc_tbl (col1) VALUES('1') ;
select last_insert_id() ;
commit;
결과값 ==> 1
아래 2,3을 동시에 실행 할 경우 결과값은 각각 처리 됨
2. A사용자가 DB에 접속하여 아래의 쿼리 수행
INSERT INTO auto_inc_tbl (col1) VALUES('2') ;
select last_insert_id() ;
결과 ==>2
3. B 사용자가 DB에 접속하여 아래의 쿼리 수행
INSERT INTO auto_inc_tbl (col1) VALUES('3') ;
select last_insert_id() ;
결과 ==>3