Oracle Sequence Transaction - 트랜잭션을 사용하면 시퀀스에서 중복 값으로 문제가 생길까?

다른 사람이 짠 코드를 읽다가 문득 트랜잭션 안에 들어가있는 시퀀스는 롤백이 되어서 중복된 값을 가져가진 않을까 하는 생각이 들었다

 

트랜잭션


데이터베이스에서 데이터를 처리하는 하나의 단위로, 여러 개의 쿼리문을 실행 후 중간에 하나라도 잘못된 호출이 있으면 그 여러 개의 쿼리 명령이 취소된다.

 

(트랜잭션 안의 데이터베이스 쿼리들이 하나씩 실행되다가 중간에 뻑나면 롤백된다는 소리...)

 

시퀀스


오라클에서는 자동 증가 컬럼을 사용할 수 없기 때문에 MAX(컬럼) + 1 을 사용하거나 SEQUENCE 를 사용하는데, 중복을 방지하기 위해서 SEQUENCE 를 사용한다. 오라클 시퀀스는 NEXTVAL를 사용하면 값이 1씩 증가하게 된다.

 

(MAX(컬럼) + 1 은 중복값으로 인한 문제가 발생할 수 있기 때문에 자동으로 값이 증가하는 SEQUENCE 를 권장!!)

 

트랜잭션을 사용하면 시퀀스에서 중복 값으로 문제가 생길까?


시퀀스는 트랜젝션과 상관없이 동작하고 자동으로 1씩 증가하므로 중복값을 방지할 수 있다.

 

https://stackoverflow.com/questions/12104407/oracle-sequence-transactionality

 

Oracle Sequence Transactionality

I need for a particular business scenario to set a field on an entity (not the PK) a number from a sequence (the sequence has to be a number between min and max I defined the sequence like this :

stackoverflow.com

↑↑↑↑  참고  ↑↑↑↑

 

반응형