다른 사람이 짠 코드를 읽다가 문득 트랜잭션 안에 들어가있는 시퀀스는 롤백이 되어서 중복된 값을 가져가진 않을까 하는 생각이 들었다
트랜잭션
데이터베이스에서 데이터를 처리하는 하나의 단위로, 여러 개의 쿼리문을 실행 후 중간에 하나라도 잘못된 호출이 있으면 그 여러 개의 쿼리 명령이 취소된다.
(트랜잭션 안의 데이터베이스 쿼리들이 하나씩 실행되다가 중간에 뻑나면 롤백된다는 소리...)
시퀀스
오라클에서는 자동 증가 컬럼을 사용할 수 없기 때문에 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
↑↑↑↑ 참고 ↑↑↑↑
'🧾 SQL > Oracle' 카테고리의 다른 글
ORA-00911: invalid character 오라클 오류 (0) | 2022.01.14 |
---|---|
사용자명/ 비밀번호가 부적합, 로그온할 수 없습니다 - 오라클 접속 오류 대소문자 구분 넣어도 해결 안될 때 (0) | 2022.01.10 |
Window - oracle 로컬 DB 생성(오라클 디비 만들기) 총 정리 (0) | 2022.01.10 |