CREATE TABLE [스키마.]테이블명(
컬럼1 컬럼1_데이터타입 [NULL, NOT NULL],
컬럼2 컬럼2_데이터타입 [NULL, NOT NULL],
...
)[TABLESPACE 테이블스페이스명]
데이터 타입 | 설명 |
---|---|
CHAR(크기 [ BYTE | CHAR ]) | 고정길이 문자, 최대 2000BYTE, 디폴트 값 1BYTE |
VARCARCHAR2(크기 [ BYTE | CHAR ]) | 가변길이 문자, 최대 4000BYTE, 디폴트 값 1BYTE |
NCHAR(크기 [ BYTE | CHAR ]) | 고정길이 유니코드 문자(다국어 입력 가능), 최대 2000BYTE, 디폴트 값 1BYTE |
NVARCARCHAR2(크기) | 가변길이 유니코드 문자(다국어 입력 가능), 최대 4000BYTE, 디폴트 값 1BYTE |
LONG | 최대 2GB크기의 가변길이 문자형, 잘 사용하지 않음 |
CREATE TABLE CHARTYPE(
COLUMN1 CHAR(10),
COLUMN2 VARCHAR2(10),
COLUMN3 CHAR(10 CHAR),
COLUMN4 VARCHAR2(10 CHAR),
COLUMN5 NCHAR(10),
COLUMN6 NVARCHAR2(10),
COLUMN7 LONG
);
INSERT INTO CHARTYPE VALUES('ABC', 'ABC', 'ABC','ABC','ABC','ABC','ABC');
INSERT INTO CHARTYPE VALUES('홍길동', '홍길동','홍길동','홍길동','홍길동','홍길동','홍길동');
SELECT column1, LENGTH(column1) AS LEN1, column2, LENGTH(column2) AS LEN2
FROM chartype;
같은 값을 입력했어도 CHAR타입은 고정길이를 반환하므로, 공간효율화를 위해 VARCHAR2타입을 쓰자!
SELECT column3, LENGTH(column3) AS LEN3, column4, LENGTH(column4) AS LEN4
FROM chartype;
SELECT column5, LENGTH(column5) AS LEN5, column6, LENGTH(column6) AS LEN6
FROM chartype;
데이터 타입 | 설명 |
---|---|
NUMBER[(p, [s])] | 가변숫자, p(1~38, 디폴트값은 38)와 s(-84~127, 디폴트값은 0)는 십진수 기준, 최대 22BYTE |
FLOAT[(p)] | NUMBER의 하위 타입, p는 1~128, 디폴트 값은 128, 이진수 기준, 최대 22BYTE |
BINARY_FLOAT | 32비트 부동소수점 수, 최대 4BYTE |
BINARY_DOUBLE | 64비트 부동소수점 수, 최대 8BYTE |
CREATE TABLE NUMTYPE(
COLUMN1 INTEGER,
COLUMN2 NUMBER,
COLUMN3 DECIMAL,
COLUMN4 FLOAT,
COLUMN5 BINARY_FLOAT,
COLUMN6 BINARY_DOUBLE
);
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH
FROM user_tab_cols
WHERE table_name='NUMTYPE';
INTEGER, DECIMAL도 NUMBER로 타입이 변환되어 생성된다!
데이터 타입 | 설명 |
---|---|
DATE | BC 4712년 1월 1일부터 999년 12월 31일 연,월,일,시,분,초까지 입력 가능하다. |
TIMESTAMP[(fractional_seconds_precision)] | 연,월,일,시,분,초,밀리초까지 입력 가능하다. fractional_seconds_precision은 0~9까지 입력할 수 있고 디폴트 값은 6이다. |
CREATE TABLE DATETYPE(
COLUMN1 DATE,
COLUMN2 TIMESTAMP
);
INSERT INTO datetype VALUES(SYSDATE, SYSTIMESTAMP);
SELECT *
FROM datetype;
TIMESTAMP의 날짜 정확도가 더 높다
정형데이터(문자, 숫자, 날짜등 구조화된 데이터)에 비해 텍스트, 그래픽, 이미지, 사운드등 비정형 데이터는 그 크기가 매우 큰데, 이런 데이터를 저장하는데 LOB타입을 사용한다.
문자형 대용량 데이터 : CLOB, NCLOB
그래픽, 이미지, 동양상등의 데이터 : BLOB
데이터 타입 | 설명 |
---|---|
CLOB | 문자형 대용량 객체. 고정길이와 가변길이 문자 집합 지원. 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈) |
NCLOB | 유니코드(다국어 지원)을 포함한 문자형 대용량 객체. 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈) |
BLOB | 이진형 대용량 객체. 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈) |
BFILE | 대용량 이진 파일에 대한 로케이터(위치, 이름)저장. 최대 크기는 4GB |
제약조건은 컬럼 속성처럼 보이지만 하나의 데이터베이스 객체이므로 고유의 이름이 있는데 별도로 이름을 명시하지 않으면 오라클에서 자동으로 생성해준다. 사용자가 생성한 제약조건은 USER_CONSTRAINTS 시스템 뷰에서 확인할 수 있다.
해당 컬럼 값은 NULL을 허용하지 않음
컬럼명 데이터타입 NOT NULL;
해당 컬럼 값은 유일해야함
컬럼명 데이터타입 UNIQUE;
CONSTRAINT 제약조건명 UNIQUE (컬럼명, ...);
not null & unique, 테이블당 1개만 존재할 수 있다.
데이터의 무결성(정확성과 일관성을 유지한다는 뜻)을 실질적으로 구현한 것
컬럼명 데이터타입 PRIMARY KEY;
CONSTRAINT 제약조건명 PRIMARY KEY (컬럼명, ...);
해당 컬럼 값이 다른 컬럼 값을 참조해야함
테이블 간의 참조 데이터 무결성을 위한 제약조건
- 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
- 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
- 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
CONSTRAINT 외래키명 FOREIGN KEY (컬럼명, ...)
REFERENCES 참조테이블(참조테이블 컬럼명, ...)
해당 컬럼에 저장 가능한 데이터 값의 범위나 사용자 조건을 지정
컬럼명 데이터타입
CONSTRAINT 체크명 CHECK (체크조건)
CREATE TABLE 테이블명(
{컬럼명} {자료형(범위)} CONSTRAINT {제약조건명} {제약조건},
{컬럼명} {자료형(범위)} CONSTRAINT {제약조건명} {check(조건)},
);
CREATE TABLE EEE (
COL_NOT_NULL NUMBER(10) NOT NULL,
COL_PK NUMBER(10) PRIMARY KEY,
COL_UNIQUE VARCHAR2(10) UNIQUE NOT NULL,
COL_CHECK NUMBER(2),
CONSTRAINT COL_CK CHECK (COL_CHECK BETWEEN 20 AND 99)
);
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, SEARCH_CONDITION
FROM USER_CONSTRAINTS
WHERE table_name='EEE';