728x90
20221014(금)
- 목차
- (문자, 숫자, 날짜, LOB) 데이터 타입
- NULL vs NOT NULL
- 제약조건 (Constraints)
< 문자 데이터 타입 >
데이터 타입 | 설명 |
CHAR (크기[ BYTE | CHAR ]) | 고정길이 문자, 최대 2000byte, 디폴트 값은 1byte |
VARCARCHAR2 (크기[ BYTE | CHAR ]) | 가변길이 문자, 최대 4000byte, 디폴트 값은 1byte |
NCHAR (크기) | 고정길이 유니코드 문자(다국어 입력 가능), 최대 2000byte, 디폴트 값은 1 |
NVARCARCHAR2 (크기) | 가변길이 유니코드 문자(다국어 입력 가능), 최대 4000byte, 디폴트 값은 1 |
LONG | 최대 2GB 크기의 가변길이 문자형, 잘 사용하지 않음 |
- 빨간색 : 이름
- 파란색 : AS는 별칭.
- 한글은 설정에 따라 3BYTE로 관리된다.
- VARCHAR2(3) = VARCHAR2(3 BYTE)
- COLUMN1에 9바이트 값이 들어가야되는데 현재 3바이트로 설정되어 있음.
- 앞에서 오류나서 실행 중지된다.
- LENGTHB(컬럼) : 컬럼이 차지하는 BYTE 수
- LENGTH(컬럼) : 컬럼에 저장된 데이터의 길이
< 숫자 데이터 타입 >
데이터 타입 | 설명 |
NUMBER [(p, [s])] NUMBER(숫자부분, 소수부분) |
가변숫자, p(1~38, 디폴트 값은 38)와 s(-84~127, 디폴트 값은 0)는 십진수 기준, 최대 22byte ex) 123.54 NUMBER(5, 2) = 123.54 항상 소수자리 먼저 챙기기!!! (반올림 등) 123.54 NUMBER(7, -1) = 120 -1은 소수점 왼쪽 첫자리 3이 반올림된다.(소수는 버림) |
FLOAT[(p)] | NUMBER의 하위 타입, p는 1~128, 디폴트 값은 128, 이진수 기준, 최대 22byte |
BINARY_FLOAT | 32비트 부동소수점 수, 최대 4byte |
BINARY_DOUBLE | 64비트 부동소수점 수, 최대 8byte |
< 날짜 데이터 타입 >
데이터 타입 | 설명 |
DATE | BC 4712년 1월 1일부터 9999년 12월 31일, 연,월,일,시,분,초까지 입력 가능하다. |
TIMESTAMP [(fractional_seconds_precision)] |
연도, 월, 일, 시, 분, 초는 물론 밀리초까지 입력 가능하다. fractional_seconds_precision은 0~9까지 입력할 수 있고 디폴트 값은 6이다. |
< LOB 데이터 타입 >
LOB는 ‘Large OBject’의 약자로 대용량 데이터를 저장할 수 있는 데이터 타입이다.
데이터 타입 | 설명 |
CLOB | 문자형 대용량 객체. 고정길이와 가변길이 문자 집합 지원, 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈) |
NCLOB | 유니코드(다국어 지원)를 포함한 문자형 대용량 객체. 최대 크기는 (4GB-1) * (데이터베이스 블록 사이즈) |
BLOB | 이진형 대용량 객체. 최대 크기는(4GB-1) * (데이터베이스 블록 사이즈) |
BFILE | 대용량 이진 파일에 대한 로케이터(위치, 이름)저장. 최대 크기는 4GB |
< NULL vs NOT NULL >
- NULL은 ‘값이 없음’을 의미하며 테이블을 생성할 때 컬럼 속성에 기술한다.
- 디폴트 값이 NULL이므로 별도로 지정하지 않으면 해당 컬럼은 NULL을 허용하게 된다.
- NULL을 허용하지 않으려면 NOT NULL 구문을 명시
- NULL 허용이란 해당 컬럼에 값을 넣지 않아도 된다는 의미이며,
NOT NULL로 명시한 컬럼에 데이터를 넣지 않으면 해당 로우 INSERT 자체가 불가능하다.
NULL이 가능하다고 나오는 YES, NOT NULL로 지정된 컬럼은 NO라고 나온다.
- *오라클에서만 ' ' 가 NULL이라는 의미로 해석된다!! 주의!!
- BUT, ' ' 오라클에서는 NULL로 해석하지만, ANSI 표준에서는 NULL로 한다.
- 값의 개수를 맞추기 위해 NULL을 집어넣는다.
< 제약조건 (Constraints) >
- 데이터 무결성을 보장하기 위한 용도로 사용됨
- * 무결성 : 데이터가 결함이 없다는 뜻.
(제약조건에는 NOT NULL, UNIQUE, 기본키, 외래키, CHECK 등이 있다.)
(1) NOT NULL
컬럼을 정의할 때 NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야 한다.
컬럼명 데이터타입 NOT NULL
(2) UNIQUE
UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다. (중복 값 허용X)
컬럼명 데이터타입 UNIQUE
혹은
CONSTRAINTS 제약조건명 UNIQUE(컬럼명, ...)
- 컬럼에 제약조건 설정시
1) 테이블수준제약 : 컬럼을 다 정의하고 나서, 마지막에 제약조건설정
2) 컬럼수준제약 : 컬럼 생성시 제약조건 설정
- NULL은 중복되어도 상관없다.
➡ NULL 허용 컬럼이기는 하지만 UNIQUE 제약조건이 붙었으므로 중복 입력되지 않아야 하는데 입력되었다.
NULL은 값이 없음을 의미하므로, UNIQUE 비교 대상에서 NULL은 제외된다는 점을 기억해 두자.
(3) 기본키 (Primary key)
UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.
보통 테이블에 키를 생성했다라고 할 때, 이는 기본키를 의미한다.
기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.
컬럼명 데이터타입 PRIMARY KEY
혹은
CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명, ...)
* 컬럼에 제약조건이 있다는 것은 성능이 떨어진다. ➡ 중복시 막히니까.
보통, 테이블을 만들 때 특수한 경우를 제외하고 기본키는 반드시 생성하는 것이 원칙이다.
(4) 외래키 (Foreign key)
테이블 간의 참조 데이터 무결성을 위한 제약조건이다.
CONSTRAINT 외래키명 FOREIGN KEY(컬럼명, ...)
REFERENCES 참조 테이블(참조 테이블 컬럼명, ...)
- 외래키에 대한 제약사항
(1) 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
(2) 외래키에 사용할 수 있는 컬럼 개수는 최대 32개
(3) 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
(5) CHECK
컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.
CONSTRAINT 체크명 CHECK(체크조건)
- 테이블 명 달라도 체크명 같으면 에러난다.
728x90
'🏫 Open API_JAVA' 카테고리의 다른 글
[59일차] SQL 문장 살펴보기 (UPDATE / MERGE / DELETE / COMMIT과 ROLLBACK, TRUNCATE / ROWNUM / 함수) (0) | 2022.10.21 |
---|---|
[58일차] 테이블 변경 / 테이블 복사 / 뷰 / 인덱스 / 시노님 / 시퀀스 / 파티션 테이블 / SELECT문 (0) | 2022.10.17 |
[56일차] SQL, PS/SQL / 테이블스페이스 생성 (0) | 2022.10.16 |
[55일차] 데이터 베이스 설정 및 샘플 스키마 설치 (0) | 2022.10.14 |
[52일차] 보조 스트림 / 네트워크 기초 (0) | 2022.10.08 |