Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/5월

22.05.25 - [뷰, 제약조건, 시퀀스 ] - VIEW, CONSTRAINT, SEQUENCE

giggs 2022. 5. 27. 14:18

 

 

VIEW

 

 

 

 

 

 

창문이 파란색처럼 생겼으면 보이는 부분 안에서 어디든 조회 가능~!~!

 

테이블 2개를 JOINJOIN 해서 보는 경우

 

 

 

 

 

 

 

이런 식으로 창문을 보여주는 것이 VIEW 가상의 테이블을 만들어 주는 것!

 

 

 

 


 

DB에서 실습해보기

 

1. JOIN 사용해서 테이블 이어 주기

 

 

 

 

 

  • 이 형식을 보려면 JOIN을 했어야 했는데 이 자체를 VIEW로 만들어버릴 수 있다!

 

 

 


 

 

2. 뷰 생성 - CREATE VIEW 

 

 

 

 

1. SYS계정에서 권한 부여

 

 

 

 


 

 

 

2. CREATE VIEW

 

 

 

 

 


 

 

 

3. VIEW 확인해보기

 

 

 

 

 

  • 삭제 안 해주면 TABLE 계속 존재하는 것처럼 계속 존재한다~~

 

 

 

외부에서 우리 DB의 ID 정보를 보고 싶어 한다??

  • VIEW를 만들어서 주고 읽기만 가능 권한 해준다.
  • VIEW는 조회 용도로 사용한다고 생각 / 수정, 변경 안된다고 보면 된다.
  • VIEW JOIN 가능

 

 

 

VIEW 끝

 

 

 

 

 


 

 

 

 

제약조건

 

[ NOT NULL / DEFAULT / CHECK / PRIMARY KEY / UNIQUE / FOREIGN KEY ]

 

 


 

 

 

1. NOT NULL : NULL 값 허용하지 않음

 

 

 

 

 


 

 

 

 

2. DEFAULT : 기본으로 들어갈 값

 

 

 

 

 


 

 

 

 

3. CHECK : 체크 조건 검사를 통과해야만 데이터 저장 가능

 

 

 

 

 


 

 

 

 

4. UNIQUE : 중복 방지

 

 

 

 

 


 

 

 

5. PRIMARY KEY : 기본키(식별자) ( NOT NULL, UNIQUE )

  • 이 칼럼에서 유일한 식별자로 사용하겠다~가 제일 중요한 기능!
  • PK 지정하면 인덱스 칼럼을 만들어주는데 ID보다는 NO에 하는 게 낫다.

 

 

 

 

 

 

 


 

 

 

6. FOREIGN KEY : 외래 키 

  • 다른 테이블의 어떤 칼럼을 참조할 때 연결
  • 연결되면 부모 테이블 / 자식 테이블 관계로 된다.
  • > 자식은 부모 테이블에 있는 ~~~~ 칼럼을 확인해라 – 이 칼럼에 없는 값은 들어가지 않도록 제약

 

 

 

 CONSTRAINT 제약조건 이름 FOREIGN KEY(외래키 설정 칼럼) REFERENCES 참조할 부모테이블(칼럼); 

  • - 제약조건 / 이름 / 외래키(칼럼) / 참조할칼럼(테이블(칼럼))

 

 

맨뒤에 STUDENT(NO)에서 NO는 삭제 가능 

  • WHY?
  • 그 테이블의 기본키를 자동적으로 참조하게 해 준다..
  • 칼럼명은 중요하지 않다. - 어떤 칼럼을 참조하는지가 중요
  •  타입은 맞아야 한다..

 

 

 

 

 

 


 

 

 

+@FOREIGN KEY - 값 입력 테스트해보기

 

 

 

 

 

  • >STD_NO에 1을 넣으려고 하면 – NO칼럼에 1이라는 값이 있어야 한다!!
  • >참조하는 부모 테이블 칼럼에 있는 값만 자식 칼럼에 올 수 있다!

 

 

 

 

실습 1

  • 부모테이블에 존재하는 1번 학생에게
  • 자식 테이블에서 A 주겠다. -- 성공

 

 

 

 

 

실습 2

  • 부모 테이블에 존재하지 않는 5번 학생에게
  • 자식 테이블에서 A 주겠다. -- 실패

 

 

 

 

 

##CEHCK

  • 우리가 걸어놓은 제약조건의 이름으로 에러 나는 것 확인!
  • 제약조건 이름 잘 지어놓으면 어떤 에러인지 파악 쉽겠구나~

 

 

 

 


 

 

 

+@FOREIGN KEY - 조건 추가 CASCADE || SET NULL

 

 

 

## ON DELETE CASCADE

 

 

 

조건 추가해주기~

 

 

 

 

부모 테이블에서 1번 학생을 없애버리면?

  • 자식 테이블에서 참조하고 있었는데 에러 난다.
  • 이것을 방지 –- 1번 학생이 삭제될 시 참조하고 있는 자식의 데이터도 같이 삭제되었으면 좋겠다.
  • ( = 부모 테이블의 ROW 삭제될 경우 – 참조하고 잇는 자식 테이블의 ROW도 삭제되도록 )
  • CASCADE

 

 


 

 

 

## ON DELETE SET NULL

 

 

 

 

부모 테이블에서 1번 학생을 없애버리면??

  • 자식 테이블에서 참조하고 있었는데 에러 난다.
  • 이것을 방지 – 1번 학생이 삭제될 시 참조하고 있는 자식 테이블의 값은 NULL로 변경되도록
  • ( = 부모 테이블의 ROW 삭제될 경우 – 참조하고 잇는 자식 테이블의 ROW에 NULL로 변경)
  • SET NULL

 

 

## 굳이 삭제하거나 NULL 값을 만들 필요 없다.

  • 존재해도 문제안 되니까
  • 데이터는 중요하니까
  • 다른 방식으로 처리한다 (Y/N 칼럼으로 )

 

 

 

제약조건 끝 

 

 

 


 

 

 

 

 

시퀀스 - SEQUENCE

  • CREATE SEQUENCE 시퀀스 이름;
  • 함수 - [ NEXTVAL , CURRVAL ]
  • 이전 값 보는 함수는 X

 

  • 시퀀스는 DB 객체 중에 하나인데 어떤 친구냐면
  • 값을 1씩 증가시켜주는 작업을 할 때 사용하는 친구

 

 

 

 


 

 

 

NEXTVAL 함수 사용해보기

  • 실행할 때마다 1씩 증가하는 값을 계속 보여줌

 

 

 

 

 

 

 

실행할 때마다 1씩 증가하는 값을 계속 보여줌

 

 

 

 


 

 

 

 

CURRVAL 함수 사용해보기

  • 현재의 시퀀스 값 조회 함수

 

 

 

 

## CHECK

  • 시퀀스를 생성하자마자 현재 값 조회하면 – 안된다.
  • NEXTVAL 함수 1번 이상 사용한 것에 대해서 조회 가능

 

 

 


 

 

 

SEQUENCE 생성

  • 시퀀스 생성 값 설정하기

 

 

 

 


 

 

 

#CACHE 설명

 

 

 

  • 시퀀스가 NEXTVAL가 다음 값을 가져오려고 – 마지막 값이 저장된 곳에 가서 확인하고 다음 값 찾고 반환 처리 , 번거롭다.
  • 그렇게 안 하고 CACHE 20 해주면 -> 현재 시퀀스 1이라는 거 확인하면 1~20까지 시퀀스가 숫자를 미리 들고 있다. 들고 있다가 NEXTVAL 호출될 때마다 들고 있던 것 하나하나씩 주는 방식.( 번호 확인하는 번거로움 없어짐 )
  • 시퀀스가 이미 20까지 들고 있고 시퀀스 넘버는 21로 바꿔놓은 상태임으로 --> 들고 있던 20번까지 사용 안 하고 1 , 2, 3번까지만 사용했더라도 --> 컴퓨터 껐다가 다시 접속해서 NEXTVAL 사용하면 21이 출력된다.
  • 결론 :  NOCACHE로 설정해주는 것이 좋다.

 

 

 


 

 

 

SEQUENCE 사용

 

  • 이클립스에 회원번호 입력에 내가 직접 지정해주었었는데 
  • 이제는 내가 지정 X --- 자동으로 지정되도록 변경해주기
  • 내가 만든 시퀀스를 입력해준다!

 

 

 

  • ? 로 할 필요 없이 직접 쿼리 날려주면 된다.!.!
  • 테이블에 자료 이미 있을 시 처리 필요
  • 1. 시퀀스 넘버 맞춰준 다음에 실행하거나 / 2. 시퀀스 시작 값을 맞춰 주거나

 

 

 

 

 


 




REVIEW



VIEW
창문이라는 예시가 이해하기 좋게 다가왔다.
내가 만들어 놓은 창문에 보이는 것들은 다 조회 가능! 
매번 JOIN을 해야 하는 무거운 것보다
VIEW로 만들어 놓고, TABLE처럼 사용 가능했다.
내 입맛에 맞춰 잘 만들어 놓으면 
유용할 듯싶었다.
다만 VIEW는 수정/변경이 안 되는 것이라고 보며
삭제 후 다시 만들어야 한다!


제약조건 부분에서는
FOREGIN KEY -
부모 테이블에 존재해야지 자식 테이블에 존재할 수 있다. 
CASCADE나 SET NULL 말고 - YN체크 칼럼 많이 사용
회사는 고객의 데이터를 쉽게 지우지 않는다. 
DELETE는 무서운 명령어라고 하셨다 ㅎㅎㅎ
하긴. 10년 전 사진도 저장되어있고
내가 삭제한 사진도 휴지통이나 삭제한 사진으로 남아있는 것을 보면.


시퀀스는 배워서 바로 DB에서 활용해 보았는데
직접 입력하는 기능이 아닌 시작될 때 하나씩 늘려주는 
. NEXTVAL 함수 잘 체크해놔야 할 듯!

후후 이번 주는 배운 내용들로 미니 프로젝트를 준비하고 있는데
오늘 배운 내용도 적용시켜서 퀄리티 업업 시키기!