-
DDL - TABLE 과 CONSTRAINT
DB의 기본 데이터 저장 단위인 TABLE은 사용자가 접근 가능한 데이터를 보유하여 RECORD(행)와 COLUMN(열)로 구성된다.
시스템 내에서 독립적으로 사용되길 원하는 데이터의 집합을 의미
집합 간의 관계를 표현할 수 있는데, 이를 위해서 FOREIGN KEY를 사용한다.
DDL (Data Definition Language)를 이용해 TABLE을 CREATE, ALTER, DROP할 수 있다.
DATA TYPE
char
고정 길이 문자 데이터
입력된 데이터의 크기와 무관하게 고정된 길이만큼 저장 공간을 차지한다.
저장 공간의 크기를 명시해야 하며, 최소 크기는 1
varchar2
가변 길이 문자 데이터
실제 입력된 데이터의 크기만큼 공간을 차지한다.
최대 크기를 명시해야 하며, 최소 크기는 1
number
가변 길이 숫자 데이터
모든 정수 저장
연산이 필요한 칼럼에 NUMBER 타입 지정
소수점 자릿수 이상 입력되면 반올림하여 저장
number 타입의 3가지 방법
- number : 최고 38자리까지의 숫자 저장 가능
- number(w) : w자리까지의 수치로 최대 38자리까지 가능 (유효 숫자가 38까지)
- number(w, d) : w는 전체 자릿수, d는 소수점 이하 자릿수를 지정, w는 d의 길이를 포함
date
날짜와 시간을 저장하는 날짜형 데이터
BC 4712년 1월 1일 ~ AD 4712년 12월 31일까지의 날짜를 저장할 수 있다.
세기부터 초까지의 데이터를 포함
timestamp
DATE형의 확장된 형태
밀리초까지 표현 가능
long
가변 길이 문자형 데이터 타입
최대 크기는 2GB
테이블에 한 개의 COLUMN만 생성 가능
SELECT의 결과로 데이터가 직접 조회된다. --나머지는? 다른걸로 조회되는겨?
clob
가변 길이 문자형 데이터 타입
최대 크기는 4GB
테이블에 여러 개의 COLUMN 생성 가능
SELECT의 결과로 데이터의 '위치'가 조회된다.
raw / long raw
이미지나 사운드를 저장할 수 있는 데이터 타입
이진 데이터를 저장하며 16진수 형태로 표시된다.
varchar2 데이터 타입과 유사하지만 문자변환을 수행할 수 없음
bfile
대용량 이진 데이터를 파일 형태로 저장하는 데이터 타입
최대 크기는 4GB
명명규칙
1.문자로 시작
2. 1 ~ 30자까지 가능
3. A~Z의 대소문자, 0~9의 숫자, 특수기호(_, $, #)만 가능
4. 오라클의 예약어나 다른 객체명과 중복 불가
5. 공백 안돼
CONSTRAINT
1. COLUMN LEVEL - inline
2. TABLE LEVEL - outline
not null
unique
check
primary key
foreign key
기본키를 참조하는 COLUMN 혹은 COLUMN의 집합을 뜻한다.
참조하고 있는 primary key의 데이터 타입과 일치해야 하며 foreign key에 참조되는 primary key는 삭제할 수 없는 제약에 걸린다.
on delete [cascade / set null] 연산자를 통해 기본키가 삭제될 경우 함께 삭제된다.
foreign key로 지정된 primary key를 삭제할 때 cascade를 쓰면 전부 삭제되고,
set null하면 foreign key가 nullable로 변경된다.
foreign key에 constraint 줄 때 함께 입력하며, 후에 삭제될 때 참조무결성을 해치지 않으면서 삭제하기 위함
제약사항 확인
user_cons_columns : column에 할당된 제약 조건 조회
user_constraints : 유저가 소유한 모든 모든 제약 조건 조회
ALTER TABLE
alter table ~ add
더보기add
기존 테이블에 새로운 컬럼을 추가
새로운 컬럼은 마지막에 추가
원하는 위치에는 못해
데이터가 존재하지 않는 row에는 null로 입력된다
alter table test add ( job varchar(9) );
add 제약조건
기존 테이블에 새로운 제약조건을 추가
alter table table_name add [constraint constraint_name] constraint_type (column_name) ;
[ ]는 생략 가능하며, 이름을 지정하지 않은 경우 정해진 이름(sys_ xxxxx)로 생성된다.
alter table ~ rename
더보기rename
컬럼명을 바꿀 때 사용
alter table test RENAME COLUMN ename TO empname ;
rename 제약조건
제약조건명을 바꿀 때 사용
alter table emp RENAME CONSTRAINT constraint_name TO constraint_name_changed ;
alter table ~ modify
더보기modify
테이블에 이미 존재하는 칼럼을 수정
해당 컬럼의 데이터 유무에 따라 동작이 다르다
자료가 없는 경우 자료가 있는 경우 테이터 타입 변경 변경 가능 변경 불가 (조건부) 컬럼의 크기 변경 변경 가능 작은 크기로는 불가 *자료가 있는 경우 데이터 타입 변경이 가능한 경우는 char과 varchar2 뿐 (최대값 고려해서 변경해야 한다)
alter table test modify ( job varchar(30) );
컬럼의 default 값을 변경하는 경우, 소급 적용이 되지 않는다.
modify 제약조건
not null을 제외한 제약조건은 수정이 불가
> drop 후, add
alter table table_name MODIFY column_name CONSTRAINTS constraint_name NOT NULL ;
alter table ~ drop
더보기drop
테이블의 존재하는 컬럼을 삭제
alter table test DROP COLUMN sal ;
drop 제약조건
테이블에 존재하는 제약조건 삭제
alter table table_name DROP [CONSTRAINT constraint_name] ;
delete / drop / truncate
종류 rollback 가능여부 비고 delete DML YEP 데이터가 지워지지만, 테이블의 용량은 그대로
TRIGGER가 걸리면 각 행이 삭제될 때마다 실행
이전에 할당되었던 영역은 삭제되어 빈 TABLE이나 CLUSTER에 그대로 남겨져 있음truncate table DDL NOPE 데이터도 지워지고 테이블의 용량도 줄어듦
TABLE과 관련된 구조 (constraint, trigger 등)과 권한에 영향을 주지 않는다.drop table DDL NOPE 데이터뿐 아니라 테이블 자체가 삭제
모든 관련된 INDEX, CONSTRAINT, TRIGGER도 삭제PL/SQL
Oracle's Procedural Language extension to SQL의 약자
변수 정의
조건 처리
반복 처리
잘차적인 방식으로 사용하도록 설계된 Procedure Language
구조
더보기PL/SQL 기본 구조
DECLARE (선택) -- 선언 코드 BEGIN (필수) -- 실행 코드 EXCEPTION (선택) -- 예외 처리 코드 END ; /
변수에 값을 대입할 때에는 := 를 사용한다.
변수 타입
1. SCALAR
P_EMPNO NUBMER(4);
P_ENAME VARCHAR2(10);
2. REFERENCE
P_EMPNO EMP.EMPNO%TYPE;
P_ENAME EMP.ENAME%TYPE;
PL/SQL의 SELECT INTO문
변수에 DB의 기존 정보를 대입하기 위해
데이터 타입, 순서가 동일해야 한다.
--화면에 출력 값을 확인하게 해주는 설정 set serveroutput on; declare d_empno emp.empno%type; d_ename emp.ename%type; begin --오라클에서 제공하는 dbms_output 패ㅣ지를 이용해 한 라인 단위로 출력 dbms_output.put_line('사번/이름'); dbms_output.put_line('------------'); --select into문 select empno, ename into p_empno, p_ename from emp where ename = 'SCOTT' ; --변수 출력 dbms_output.put_line(p_empno||'/'||p_ename) ; end; -- 끝 / -- Procedure를 끝낸다