Spring Legacy · STS · OracleDB · SQLDeveloper
create table customer(
id number,
name nvarchar2(30),
height number,
birthday date
);
create table hobby(
id number,
hobby nvarchar2(100)
);
create sequence id_counter;
insert into customer values(id_counter.nextval,'홍길동',156.2,'1990-05-05');
insert into hobby values(id_counter.currval,'배구');
insert into hobby values(id_counter.currval,'축구');
commit;
VARCHAR2 와 NVARCHAR2 차이점
VARCHAR2
VARCHAR2 는 문자열의 바이트를 기준으로 하기 때문에 ASCII Code 에 있는
문자(!Byte)인지 한글(2BYTE)인지에 따라 저장할 수 있는 단어수가 달라집니다.
20 바이트자리 VARCHAR2 일 경우 Ascii 코드표에 있는 문자라면 20자를 넣을 수 있지만
한글만 넣는다면 10자밖에 못 넣게 되며 한글과 영어를 섞어 쓸 경우 한글이 몇 자인지에 따라 달라지게 됩니다.
이런 특징은 개발자를 매우 혼란스럽게 해서 VARCAHR2 타입에 넣을때는 자리수 확인을 한글과 영어로 나눠서 입력 가능한 길이를 체크하는등 매우 번거로운 작업을 수행해야 합니다.
NVARCHAR2
이런 문제를 해결하고자 오라클에서는 NVARCHAR2 라는 새로운 자료형을 제공하고 있습니다.
NVARCHAR2를 사용할 경우 문자열의 바이트가 아닌 문자 갯수 자체를 길이로 취급하므로
한글, 영어, 기타 외국어 여부와 상관없이 처리할 수 있습니다.
SEQUENCE
데이터베이스에서는 일련번호 생성을 간단히 처리할 수 있는 기능들을 제공합니다.
Oracle에서는 테이블 속성으로 제공하지 않고 별도의 Sequence 객체를 생성해서 이용할 수 있습니다.
이러한 데이터베이스에서 제공하는 기능을 사용하면 동시성 문제에 신경을 쓰지 않고
간단히 처리할 수 있지만, 하나의 데이터베이스에 종속되는 단점도 있습니다.
1. 시퀀스 생성
CREATE SEQUENCE 시퀀스명
2. 시퀀스 사용하기
시퀀스를 생성하기 위해서는 "시퀀스명.NEXTVAL" 로 사용합니다.
INSERT INTO TB_BOARD(NUM, NAME, TITLE) VALUES (SEQ_BOARD.NEXTVAL, '홍길동', '제목');
현재 생성된 시퀀스 값을 확인하기 위해서 "시퀀스명.CURRVAL" 을 사용할 수 있습니다.
SELECT SEQ_BOARD.CURRVAL FROM DUAL;
현재 데이터베이스 세션에서 .NEXTVAL 을 먼저 사용해야만 .CURRVAL 을 사용할 수 있습니다.
정리참고 링크:
https://www.lesstif.com/dbms/oracle-varchar2-nvarchar2-89555713.html
https://offbyone.tistory.com/239
DB ERD 관계선 설명 링크↓
https://parkhyeokjin.github.io/others/2018/11/07/DbERD.html
selectMaxId는 제일 큰 id 선택
'STUDY > SpringLegacy' 카테고리의 다른 글
[Spring] 답변형 게시판 만드는 방법 (2) | 2022.09.22 |
---|---|
[Spring] 페이징 처리와 검색 기능 생성 이해하기 (0) | 2022.09.21 |
[JSP] 예외처리 연습 / JSP include 태그 (1) | 2022.09.19 |
[Spring] 게시판 만들기 총정리 (게시글 등록·확인·삭제·수정) (0) | 2022.09.19 |
[Spring] 글 목록·상세 출력 / 입력·등록·삭제·수정 만들기 (0) | 2022.09.17 |