5 minute read

SQL - 5

  • 데이터 조작어(DELETE)
  • 트랜잭션, 세션
  • 데이터 정의어(DDL)
  • 객체 종류
  • 제약조건



데이터 조작어 - 3. DELETE문: 테이블에 있는 데이터 삭제

  • 기본문

    DELETE FROM [테이블 이름]
    WHERE [삭제할 대상 행을 선별하는 조건식];

  • 주의!

    WHERE절 사용하지 않을 시, 테이블 전체 삭제됨!



트랜잭션 제어와 세션 - 1. 트랜잭션?

  • 트랜잭션이란,
    • 더 이상 분할할 수 없는 ‘최소 수행 단위’
    • 한 개 이상의 데이터 조작어(DML)로 이루어져 있음
    • 하나의 작업/밀접하게 연관된 작업을 수행(ex. 계좌이체 출/입금)

      ALL or NOTHING

  • TCL(Transaction Control Language)
    • 트랜잭션을 제어하는 명령어
    • ROLLBACK: 트랜잭션 취소!
    • COMMIT: 트랜잭션을 DB에 영구히 반영!(ROLLBACK 불가)



트랜잭션 제어와 세션 - 2. 세션과 읽기 일관성

  • 오라클 데이터베이스의 세션
    • DB 접속부터 접속 종료까지를 의미
    • 세션 내 여러 개의 트랜잭션 존재
  • 읽기 일관성
    • 테이블을 조회하는 여러 세션이 존재
    • 트랜잭션이 확정(COMMIT)되기 전까지는, 조작 전 상태가 일관적으로 조회/출력됨

      데이터 직접 조작하고 있는 세션은 제외



트랜잭션 제어와 세션 - 3. LOCK

  • LOCK(데이터 잠금)

    특정 세션에서 조작 중인 데이터는 다른 세션에서 조작할 수 없음!

    트랜잭션이 완료(ROLLBACK or COMMIT)되기 전까지..

  • LOCK 종류
    • 행 레벨: 조작 중인 행에 LOCK
    • 테이블 레벨: DML을 사용하여 데이터 변경 중인 테이블에 LOCK



데이터 정의어 - 1. 데이터 정의어?

  • 데이터 정의어(DDL: Data Definition Language)

    객체를 생성, 변경, 삭제한다.

  • 주의! 자동 COMMIT

    DDL은 명령어를 수행하자마자 DB에 반영됨!(ROLLBACK불가)



데이터 정의어 - 2. CREATE(테이블 생성)

  • 기본문
    • CREATE TABLE 소유 계정.테이블 이름 (
    • 열1 이름, 열1 자료형
    • 열2 이름, 열2 자료형
    • ... ...
    • 열N 이름, 열N 자료형
    • );
  • 테이블 이름 생성 규칙
    1. 문자(숫자X)로 시작해야함 (한글도 가능하지만 영문 권장)
    2. 30byte 이하 (영문 30자, 한글 15자)
    3. 같은 계정 내, 테이블 이름 중복 불가
    4. 영문(한글), 숫자, 특수문자($, #, _) 가능
    5. SQL 키워드(SELECT, FROM 등)는 사용 불가
  • 열 이름 생성 규칙
    1. 문자(숫자X)로 시작해야함
    2. 30byte 이하
    3. 같은 테이블 내, 열 이름 중복 불가
    4. 영문(한글), 숫자, 특수문자($, #, _) 가능
    5. SQL 키워드(SELECT, FROM 등)는 사용 불가
  • 기존 테이블 복사
    • 열 구조/데이터 그대로
    • 일부 데이터만(열 구조는 동일)
    • 테이블 구조만(데이터X)

createCopy

createCopy2

createCopy3



데이터 정의어 - 3. ALTER(테이블 변경)

  • 키워드
    • ADD: 열 추가
    • RENAME: 열 이름 변경
    • MODIFY: 열의 자료형 변경
      • 저장된 데이터 상태에 따라 제약 있음
      • ex. 문자열 -> 숫자형 변경 대부분 불가
    • DROP: 특정 열 삭제



데이터 정의어 - 4. RENAME(테이블 이름 변경)

  • 기본문

    RENAME [대상 테이블] TO [변경할 테이블명]



데이터 정의어 - 5. TRUNCATE(테이블의 데이터 삭제)

  • 데이터 삭제 관련
    • DELETE FROM 테이블명: 트랜잭션 생성되어 속도 느림
    • TRUNCATE TABLE 테이블명: 테이블 내 데이터만 삭제(트랜잭션X, 빠름)



데이터 정의어 - 6. DROP(테이블 자체를 삭제)

  • 기본문

    DROP TABLE 테이블명;



객체 종류 - 1. 데이터 사전

  • 오라클 내 2가지 DB 테이블
    1. 사용자 테이블(User Table or Normal Table)
    2. 데이터 사전(Data Dictionary or Base Table)
  • DB를 위한 데이터를 저장한 데이터 사전
    • DB를 구성하고 운영하는데 필요한 모든 정보 저장
    • DB 생성 시점에 자동으로 만들어짐
    • 사용자의 직접 접근 및 작업 불가
  • 데이터 사전 뷰(Data Dictionary View) 제공
    • SELECT문으로 정보 열람 가능
    • USER_XXXX: 현재 DB에 접속한 사용자가 소유한 객체 정보
    • ALL_XXXX: 사용 가능한 모든 객체 정보
    • DBA_XXXX: DB관리를 위한 정보(관리 권한을 가진 SYSTEM, SYS 사용자만 열람)
    • V$_XXXX: DB성능 관련 정보(X$_XXXX 테이블의 뷰)



객체 종류 - 2. 인덱스

  • 검색 종류
    • FULL SCAN: 처음부터 끝까지
    • INDEX SCAN: 색인(차례) 활용, 특정 지점으로 가서 검색(빠름)
  • 인덱스란,

    오라클 데이터베이스에서 데이터 검색 성능 향상을 위해 테이블 열에 사용하는 객체

  • 인덱스 생성
    • 자동 생성

      기본키(Primary KEY) 설정하면 자동으로 생성됨

    • 사용자 지정 생성

      생성할 열을 선택, 인덱스명 지정

  • 기본문
    • CREATE INDEX 인덱스명
    • ON 테이블명( 열1 ASC or DESC,
    • 열2 ASC or DESC,
    • ... ... );
  • 인덱스 종류
    • 단일 인덱스(single index)
    • 복합/결합 인덱스(concatenated index)

      두 개 이상 열로 생성

    • 고유 인덱스(unique index)

      열에 중복 데이터가 없을 때 사용

    • 함수 기반 인덱스(function based index)

      열에 산술식 같은 데이터 가공 후 생성

    • 비트맵 인덱스(bitmap index)

      데이터 종류 적고, 중복 데이터 많을 때 사용

  • 인덱스 삭제

    DROP INDEX 인덱스명



객체 종류 - 3. 뷰

  • 뷰?
    • 하나 이상의 테이블을 조회하는 SELECT문을 저장한 객체
    • ‘가상 테이블’이라고도 함
  • 뷰 사용목적
    • 편의성: SELECT문의 복잡도 완화
    • 보안성: 불필요한 데이터 노출 방지
  • 기본문
    • CREATE [or REPLACE] [FORCE or NOFORCE] VIEW 뷰 이름 ( 열1, 열2 ...)
    • AS (뷰를 저장할 SELECT문)
    • [WITH CHECK OPTION [CONSTRAINT 제약조건]]
    • [WITH READ ONLY [CONSTRAINT 제약조건]] ;
  • 뷰 삭제

    DROP VIEW 뷰 이름;



객체 종류 - 4. 시퀀스

  • 시퀀스?

    오라클 데이터베이스에서 특정 규칙에 맞는 연속 숫자를 생성하는 객체

    a.k.a 번호 생성기

  • 기본문
    • CREATE SEQUENCE 시퀀스 이름
    • [INCREMENT BY n] : 증가값(기본값 1)
    • [START WITH n] : 시작값(기본값 1)
    • [MAXVALUE n | NOMAXVALUE] : 최대값 지정
    • [MINVALUE n | NOMINVALUE] : 최소값 지정
    • [CYCLE | NOCYCLE] : 최대값 도달 시, 시작값에서 다시 시작 or 끝
    • [CACHE n | NOCACHE] : 메모리에 미리 할당할 수를 지정

sequence

  • 시퀀스 수정
    • ALTER SEQUENCE 시퀀스 이름
    • [INCREMENT BY n]
    • [MAXVALUE n | NOMAXVALUE]
    • [MINVALUE n | NOMINVALUE]
    • [CYCLE | NOCYCLE]
    • [CACHE n | NOCACHE]
  • 시퀀스 삭제

    DROP SEQUENCE 시퀀스 이름;

객체 종류 - 5. 동의어(Synonym)

  • 동의어란,
    • 테이블, 뷰, 시퀀스 등 객체 이름 대신 사용할 수 잇는 다른 이름을 부여
    • 참고!
      • 동의어: 전역변수
      • 별칭: 지역변수
  • 기본문
    • CREATE [PUBLIC] SYNONYM 동의어 이름 : PUBLIC => 데이터베이스 내 모든 사용자가 사용할 수 있도록 설정
    • FOR [사용자.] [객체이름];
  • 동의어 삭제
    • DROP SYNONYM 동의어 이름;



제약 조건 - 1. 제약 조건 종류

  • 제약 조건이란,
    • 테이블 열에 저장될 데이터의 특성/조건을 지정
    • 기존 데이터의 수정/삭제 가능 여부에도 영향
  • 종류
종류 설명
NOT NULL 지정한 열에 NULL 허용하지 않음
UNIQUE 지정한 열은 하나의 값만 가짐(중복값 불가)
PRIMARY KEY 지정한 열이 유일한 값이면서, NULL 허용하지 않음
FOREIGN KEY 다른 테이블의 열 참조, 존재하는 값는 입력 가능
CHECK 설정한 조건식을 만족하는 데이터만 입력 가능
  • 제약 조건 확인
    • C: CHECK, NOT NULL
    • U: UNIQUE
    • P: PRIMARY KEY
    • R: FOREIGN KEY



제약 조건 - 2. NOT NULL

  • 제약조건 지정(1) - 테이블 생성할 때
    • 열 이름, 자료형 뒤에 ‘NOT NULL’ 키워드 명시

notNull

  • 제약조건 지정(2) - 기존 테이블의 제약조건 변경
    • ALTER 명령어에 ‘MODIFY’ 키워드 사용
    • MODIFY ([지정할 열] NOT NULL);
    • 참고!
      • 해당 열에 이미 NULL값이 있다면, NOT NULL 설정 불가!
      • 데이터 삽입 후에야 설정 가능
  • 제약조건 이름 지정(1) - 테이블 생성할 때
    • 자료형과 제약조건 사이 위치
    • ‘CONSTRAINT’키워드 + ‘제약조건 이름’ 명시
  • 제약조건 이름 지정(2) - 기존 제약조건 RENAME
    • ALTER 명령어에 ‘RENAME CONSTRAINT’ 키워드 사용
    • RENAME CONSTRAINT [원래 이름] TO [바꿀 이름]
  • 제약 조건 삭제
    • ALTER 명령어에 ‘DROP CONSTRAINT’ 키워드 사용
    • DROP CONSTRAINT [제약조건 이름];



제약 조건 - 3. UNIQUE

  • 테이블 생성 시 제약조건 지정
    • 열 이름, 자료형 뒤에 ‘UNIQUE’ 키워드 명시
  • 조건 지정, 이름 지정 등..
    • 위 ‘NOT NULL’과 형식 동일함



제약 조건 - 4. PRIMARY KEY

  • 데이터 중복X / NULL 허용X
  • 테이블에 하나의 열만 지정 가능
    • 지정하면 자동으로 인덱스 생성됨!






공지

  • ‘권한’까지 진도 나간 후 시험 예정

다음 강의 준비




nice!!!!!

Updated: