ORACLE SQL [41강~ 완강]

byeol·2022년 10월 22일

41강 데이터 딕셔너리

DBMS는 사용자에 대한 정보나 어떤 테이블이 필요한지 등 사용자 서비스에 대한 테이블을 저장하고 있어야 한다.
그런 내용은 어떤 공간에 이런 데이터를 모아 놓고 있는데 그 공간을 DATA DICTIONARY라고 한다.

그러나 이 DATA DTCTIONARY를 뒤질 일이 없다.
왜냐하면 클라이언트 프로그램에서 이 DATA DITCTIONRY를 보기 편하게 만들어 놓았기 때문이다.
이 DICTIONARY는 VIEW형태로 저장된다. 이는 TABLE에 대한 직접적인 접근을 할 수 없다는 것으 의미한다.

두 개의 테이블을 참조해서 VIEW를 만드는 것은 이해되지만 굳이 한개의 테이블의 참조하는데 VIEW를 사용해야할까? 사실 VIEW는 간편식에 해당되지만 보안상의 이유로 사용하기도 한다.

✔️오라클이 제공하는 DATA DICTIONARY에 대한 내용 조회하기

👆 SELECT * FROM DICT;

👆 SELECT FROM USER_TABLE;

👆 SELECT
FROM USER_TAB_COLUMNS;


42강 도메인 제약조건

도메인 제약조건 :COLUMN애다가 유효한 값을 입력하는데 그 유효한 값의 형식에 대한 기본적인 가이드

예를 들어보자
만약에 ID가 중복되어 들어가면 ID '333'회원의 정보를 삭제할 떼 여러 유저의 데이터가 함께 삭제된다.
또는 HIT라는 조회수 칼럼에 -7이라는 유효하지 않은 값들이 들어갈 수 있기 때문에
유리는 도메인 제약조건을 건다.

이렇게 제약을 거는 방법은 크게 3가지 있다.
1. 필수로 입력하게 하는 NOT NULL
2. NOT NULL이지만 사용자가 입력하는 것이 아닌 내가 알아서 설정해 놓은 값 = 기본값 DEFAULT
EX) 조회수, 등록일, 관리자가 부여하는 비번
3. 유효한 범위를 잘 체크할 수 있도록 하는 체그범위 CHECK

먼저 NOT NULL, DEFAULT에 대해서 알아보자.

  • CREATE TABLE TEST
    (
    ID VARCHAR2(50) NOT NULL,
    EMAIL VARCHAR2(200) NULL,
    PHONE CHAR(13) NOT NULL,
    PWD VARCHAR2(30) DEFUALT '1111'
    )

-ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) DEFAULT '11';
-INSERT INTO TEST('ID','PHONE') VALUES('NEWLEC','010-2222-2222');

위와 같이 직접 문장을 통해서 하지 않고 테이블 편집을 통해서도 가능하며

기본값에 함수도 넣을 수 있다.


43강 체크 제약조건

앞서 도메인 제약조건을 거는 3가지 방법 중 2가지 방법인 NOT NULL, DEFAULT에 대해서 배웠다. 이번 시간에는 3번째 방법인 체크 제약조건에 대해서 배운다.

체크 제약조건 : 값의 범위/형식을 확인해서 알맞지 않으면 값이 들어가지 않도록 제약 오류를 내는 것

방법은 총 3가지
1. 처음부터 건다

  • CREATE TABLE TEST
    (
      ID VARCHAR2(50) NULL,
      PHONE VARCHAR2(200) CHECK(PHONE LIKE '010-%-____') NOT NULL,
      VARCHAR2(500) NULL
    )
  1. 테이블 생성이 아닌 ALTER TABLE 테이블이름 ADD CONSTRAINT 제약조건이름 CHECK(칼럼명 LIKE '010-%-____');을 통해서 건다.

  2. 테이블 편집에서 제약조건 추가하기


44강 정규식을 이용한 체크 제약조건

앞 서 배웠던 체크 제약조건은 더 정밀하게 다루고자할 때 한계가 있다.
-CREATE TABLE TEST
(
  ID VARCHAR2(50) NULL,
  PHONE VARCHAR2(200) CHECK(PHONE LIKE '010-%-____') NOT NULL,
  VARCHAR2(500) NULL
)

이 경우는 PHONE의 레코드에 010-aaaa-bbbb가 들어갈 수도 있다.
따라서 우리는 정규식을 이용하자

2가지 방법을 정규식을 넣을 수 있다.
1. 테이블 편집> 제약조건> 검사조건 : REGEXP_LIKE(PHONE, '^01[01]-\d{3,4}-\d{4}$')
정규식에 대한 설명은 생략, 앞에서 배웠다.

  1. 쿼리를 이용한다.
  • 1단계 소유자가 가지고 있는 MEMBER 테이블의 모든 제약조건을 본다.
    -- SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME='MEMBER';
  • 2단계 먼저 제약 조건 삭제한다
    -- ALTER TABLE MEMBER DROP CONSTRAINT MEMBER_PHONE_CHK1;
  • 3단계 쿼리를 이용하여 정규식 체약조건 넣기
    -- ALTER TABLE MEMBER
    ADD CONSTRAINT MEMBER_PHONE_CHK1 CHECK(REGEXP_LIKE(PHONE,'^01[01]-\d{3,4}-\d{4}$'));

45강 ENTITY 제약조건(PRIMARY KEY/ UNIQUE)

도메인 제약조건 : 도메인 범위 내 즉 칼럼들이 올바른 값을 가지도록 거는 조건

테이블 전체로 범위를 확대했을 때 올바른 테이터가 들어갔냐에 대한 문제는 도메인 제약조건으로 판단할 수 없기 때문에 이를 해결할 수 있는 방법에 대해서 알아보자.

  1. 중복된 레코드가 없도록 제한한다. 즉 각 레코드들을 식별할 수 있는 뭔가가 있어야 한다. 우리는 이런 칼럼을 식별 칼럼, PRIMARY KEY라고 한다.

  2. +) 추가로 식별 칼럼 이외에도 중복되어서는 안되는 칼럼 하지만 NULL이 들어올 수 있는 칼럼을 UNIQUE KEY라고 부른다.


46강 시퀀스(SEQUENCE)

시퀀스 = 일련번호

공지사항에서 이 ID라는 값을 입력할 때 NUMBER로 ID를 넣을 수도 있다.

중복 X , 계속 증가
<< 그렇다면 새로운 레코드가 들어올 때 일련 번호는 무엇으로 할까?>>
1. 기존꺼 들어가서 확인 -> 너무 귀찮음
2. 따라서 바로바로 확인하도록 하자 -> 시퀀스를 이용하자

1단계

2단계

C : 시작하는 값 설정
D : 얼마씩 증가시킬 것인지 설정
F : 얼마까지 증가시킬 것인지
캐시 : 미리 값을 설정해놓을 공간 , 만약 20이라면 20개의 일련번호를 미리 만들어 놓는다
주기 : 최대값으로 간다음 다시 초기화시켜 처음부터 다시 시작할 것인지 설정

혹은

저기서 DDL을 눌러서 직접 생성

3단계

4단계
INSERT INTO NOTICE(ID,TITLE, WRITER_ID)
VALUES (NOTICE_ID.NEXTVAL,’시퀀스 예제’,’newlec’);

하지만 매번 저렇게 ID에 NOTICE_ID.NEXTVAL이렇게 넣기가 귀찮다.
따라서

INSERT INTO NOTICE(TITLE, WRITER_ID)
VALUES(시퀀스 예제’,’newlec’);

이렇게만 써도 알아서 자동으로 만들어준다.


끝 완강이다.
하지만 부족한 부분이 많기 때문에 '오라클 SQL과 PL/SQL' 책을 통해서
더 깊이 공부해볼 생각이다.

다시 SERVLET/JSP 나머지 공부하자

profile
꾸준하게 Ready, Set, Go!

0개의 댓글