Today I Learned-18
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 자료형
);
- 테이블 이름 생성 규칙
- 문자(숫자X)로 시작해야함 (한글도 가능하지만 영문 권장)
- 30byte 이하 (영문 30자, 한글 15자)
- 같은 계정 내, 테이블 이름 중복 불가
- 영문(한글), 숫자, 특수문자($, #, _) 가능
- SQL 키워드(SELECT, FROM 등)는 사용 불가
- 열 이름 생성 규칙
- 문자(숫자X)로 시작해야함
- 30byte 이하
- 같은 테이블 내, 열 이름 중복 불가
- 영문(한글), 숫자, 특수문자($, #, _) 가능
- SQL 키워드(SELECT, FROM 등)는 사용 불가
- 기존 테이블 복사
- 열 구조/데이터 그대로
- 일부 데이터만(열 구조는 동일)
- 테이블 구조만(데이터X)
데이터 정의어 - 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 테이블
- 사용자 테이블(User Table or Normal Table)
- 데이터 사전(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]
: 메모리에 미리 할당할 수를 지정
- 시퀀스 수정
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’ 키워드 명시
- 제약조건 지정(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!!!!!