대표적인 DB 객체
DB 객체
설명
테이블
데이터를 담고 있는 객체
뷰
하나 이상의 테이블을 연결해 마치 테이블인 것처럼 사용하는 객체
인덱스
테이블에 있는 데이터를 빠르게 찾기 위한 객체
시노님
데이터베이스 객체에 대한 별칭을 부여한 객체
시퀀스
일련번호 채번을 할 때 사용되는 객체
함수
특정 연산을 하고 값을 반환하는 객체
프로시저
함수와 비슷하지만 값을 반환하지는 않는 객체
패키지
용도에 맞게 함수나 프로시저를 하나로 묶어 놓은 객체
* 채번 : 번호를 새로 부여하다
@ 테이블
데이터를 넣고 수정하고 삭제하는 [즉, 데이터를 담고 있는 객체가 테이블이다]
테이블 생성
CREATE TABLE 테이블명 (
컬럼1 컬럼1_데이터타입 [NULL, NOT NULL]
,...
)[TABLESPACE 테이블스페이명];
CREATE TABLE ORDER_ITEMS (
ORDER_ID NUMBER(12,0),
LINE_ITEM_ID NUMBER(3,0) ,
ORDER_MODE VARCHAR2(8 BYTE),
PRODUCT_ID NUMBER(3,0),
UNIT_PRICE NUMBER(8,2) DEFAULT 0,
QUANTITY NUMBER(8,0) DEFAULT 0,
CONSTRAINT PK_ORDER_ITEMS PRIMARY KEY (ORDER_ID, LINE_ITEM_ID)
);
여기서 CONSTRAINT = 제약 조건 , PK = 기본키
되도록 제공해주는 키워드(CREATE, TABLE ,TABLESPACE)들은 대문자로!! 강제는 아님
여기서 컬럼은
이름,취미,직업이 컬럼
문자 데이터 타입
데이터타입
설명
CHAR(크기)
고정길이 문자, 최대 2000byte, default value은 1bye
VARCHAR2(크기)
가변길이 문자, 최대 4000byte, default value은 1bye
NCHAR(크기)
고정길이 유니코드 문자, 최대 2000byte, default value은 1
NVARCHAR2(크기)
가변길이 유니코드 문자, 최대 4000byte, default value은 1
LONG
최대 2GB 크기의 가변길이 문자형, 잘 사용하지 않음
ex) 특정 컬럼을 VARCHAR2(10)으로 선언하면, 10byte까지 데이터를 입력할 수 있다. 근데 여기서 abc라 입력하면 가변이라서 3byte 컬럼길이가 된다. 하지만 CHAR형은 abc 입력하면 7byte가 남는다. 말그대로 고정이라 7byte가 낭비.
저장 공간 효율화를 위해 CHAR보다는 VARCHAR2가 낫다.
숫자 데이터 타입
데이터 타입
설명
NUMBER[(p,[s])]
가변숫자, p(1~38, default value 38 ) s(-84 ~ 127,default value 0) 최대 22byte
FLOAT[(p)]
NUMBER의 하위 타입, p는 1~128, default value 128, 최대 22byte
BINARY_FLOAT
32비트 부동소수점 수, 최대 4byte
BINARY_DOUBLE
64비트 부동소수점 수, 최대 8byte
4개가 있지만 대부분 NUMBER만 쓴다.
날짜 데이터 타입
데이터 타입
설명
DATE
9999년 12월 31일, 연, 월, 일, 시, 분, 초까지 입력 가능
TIMESTAMP
연도, 월, 일, 시, 분, 초는 물론 밀리초까지 입력 가능
LOB 데이터 타입
데이터 타입
설명
CLOB
문자형 대용량 객체, 고정길이와 가변길이 문자 집합 지원
NCLOB
유니코드를 포함 문자형 대용량 객체
BLOB
이진형 대용량 객체
BFILE
대용량 이진 파일에 대한 로케이터
NULL
* default value이 'NULL' 이라서 별도의 값을 지정 안해주면 NULL을 허용하게 된다. 허용하지 않을려면 'NOT NULL'
하지만 NULL로 인한 오류가 나올 수 있기 떄문에 허용을 할지 안할지 꼭 생각하고 설정해야 한다.
UNIQUE
컬럼명 데이터타입 UNIQUE
혹은
CONSTRAINTS 제약조건명 UNIQUE (컬럼명, ...)
CREATE TABLE ex (
COL_UNIQUE_NULL VARCHAR2(10) UNIQUE,
COL_UNIQUE_NNULL VARCHAR2(10) UNIQUE NOT NULL,
COL_UNIQUE VARCHAR2(10),
CONSTRAINTS unique_nm1 UNIQUE ( COL_UNIQUE)
);
* UNIQUE 비교 대상에서 NULL은 제외 된다.
PRIMARY KEY(기본키)
기본키는 (NOT NULL + UNIQUE) 속성을 동시에 가진 제약조건 이다. 반드시 한 개!
컬럼명 데이터타입 PRIMARY KEY
혹은
CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명, ...)
FOREIGN KEY(외래키)
외래키는 테이블 간의 참조 데이터 무결성을 위한 제약조건.
*반드시 참조하는 테이블이 먼저 생성 되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져야 한다.
CONSTRAINT 외래키명 FOREIGN KEY(컬럼명, ...)
REFERENCES 참조 테이블(참조 테이블 컬럼명, ...)
DROP
DROP TABLE 테이블명;
ALTER(변경)
컬럼, 제약조건 등 변경할때 쓴다. 누구나 실수는 할 수 있는 거니깐
* 기본키 뿐만 아니라 다른 제약조건도 고유의 제약조건명이 존재하므로 추가나 삭제가 가능하다.
--컬럼명 변경 : col1 컬럼 이름을 col11으로 변경
ALTER TABLE ex2_10 RENAME COLUMN Col1 TO Col11;
DESC ex2_10;
입력하면 컬럼명을 확인 할 수 있다.
--컬럼 타입 변경 : col2 컬럼을 VARCHAR2(10)에서 VARCHAR2(30)으로 변경
ALTER TABLE ex2_10 MODIFY Col2 VARCHAR2(30);
--컬럼 추가 : col3 NUMBER 타입으로 신규 생성
ALTER TABLE ex2_10 ADD Col3 NUMBER;
--컬럼삭제 : col3 컬럼을 삭제
ALTER TABLE ex2_10 DROP COLUMN Col3 ;
--제약조건 추가 : col11에 기본키 추가
ALTER TABLE ex2_10 ADD CONSTRAINTS pk_ex2_10 PRIMARY KEY (col11);
--제약조건 삭제 : col11에서 기본키 삭제
ALTER TABLE ex2_10 DROP CONSTRAINTS pk_ex2_10;
테이블 복사
프로젝트 하다보면 복사 할 일 자주 발생!
*백업용,테스트용으로 많이 복사 한다.
CREATE TABLE ex2_9_1 AS
SELECT *
FROM ex2_9;
이 구문을 사용하면 테이블 구조와 데이터가 모두 신규 테이블로 복사된다.