1. 데이터 유형
- 데이터 유형
- 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준
- 선언한 유형이 아닌 다른 종류의 데이터가 들어오려고 하면 데이터베이스는 에러를 발생시킨다.
- 대표적인 4가지 데이터 유형
- CHAR VS VARCHAR
- 저장 영역 -> 고정영역 VS 가변영역
- VARCHAR : VARCHAR(40)으로 지정할 시 40byte 허용, 'PARK,JISUNG' 입력 시 11byte만 사용
- 문자열의 비교 방법
- CHAR : BLANK을 채워서 비교함, 문자열에 앞뒤로 공백이 있더라도 문자만 찾는것과 동일
- VARCHAR : BLANK도 하나의 문자로 취급하기에 서로 다른 문자로 인식
- 저장 영역 -> 고정영역 VS 가변영역
- CHAR VS VARCHAR
| 데이터 유형 | 설명 |
| CHARACTER(s) | * 고정 길이 문자열 정보(Oracle, SQL Server 모두 CHAR로 표현) * s는 기본 길이 1바이트, 최대 길이 Oracle 2,000 byte, SQL Server 8,000 byte * s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다. |
| VARCHAR(s) | * CHARACTER VARYING의 약자로 가변 길이 문자열 정보( Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현) |
| NUMERIC | * 정수, 실수 등 숫자 정보( Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 가지고 있음) * Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다. 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 'NUMBER(8, 2)'와 같이 된다. |
| DATETIME | * 날짜와 시각 정보 ( Oracle은 DATA로 표현, SQL Server는 DATETIME으로 표현) * Oracle은 1초 단위, SQL Server는 3.33ms(millisecond) 단위 관리 |
2. CREATE TABLE
가. 테이블과 컬럼 정의
나. CREATE TABLE
- 테이블 생성 시 규칙
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
- 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
- 한 테이블 내에서는 컬럼명이 중복되게 지정될 수 없다.
- 테이블 이름을 지정하고 각 컬럼들은 괄호 "( )"로 묶어 지정한다.
- 각 컬럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.
- 컬럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)
- 컬럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
- 테이블명과 컬럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
- 벤더에서 사전에 정의한 예약어는 쓸 수 없다.
- A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
다. 제약조건(CONSTRAINT)
- 사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 컬럼에 설정하는 제약이다.
| 구분 | 설명 |
| PRIMARY KEY( 기본키 ) | * 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의 * 하나의 테이블에 하나의 기본키 제약만 정의 가능 * 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 컬럼에는 NULL을 입력할 수 없다. * 기본키 제약 = 고유키 제약 + NOT NULL |
| UNIQUE KEY ( 고유키 ) | * 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의 * 단, NULL은 고유키 제약의 대상이 아니므로, NULL 값을 가진 행이 여러 개가 있더라도 고유키 제약 위한이 되지 않는다. |
| NOT NULL | * NULL 값의 입력을 금지한다. * 디폴트 상태에서는 모든 컬럼에서 NULL을 허가하고 있지만, 이 제약을 지정함으로써 해당 컬럼은 입력 필수가 된다. * NOT NULL은 CHECK의 일부분으로 이해할 수도 있다. |
| CHECK | * 입력할 수 있는 값의 범위 등을 제한한다. * CHECK 제약으로는 TRUE & FALSE로 평가할 수 있는 논리식을 지정한다. |
| FOREIGN KEY ( 외래키 ) | * 관계형 데이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성된다. * 외래키 지정 시 참조 무결성 제약 옵션을 선택할 수 있다. |
라. 생성된 테이블 구조 확인
- Oracle
- DESCRIBE Table명;
- DESC Table명;
- SQL-Server
- sp_help dbo.Table명;
마. SELECT 문장을 통한 테이블 생성 사례
- CTAS(CREATE TABLE ~ AS SELECT ~)
- 컬럼별 데이터 유형을 다시 재정의 할 필요 없음
- 기존 테이블의 제약조건 중 NOT NULL만 적용되며, 그 외는 적용되지 않습니다.
- 기본키, 고유키, 외래키, CEHCK 등의 다른 제약 조건은 없어짐
3. ALTER TABLE
가. ADD COLUMN
나. DROP COLUMN
다. MODIFY COLUMN
- 주의점
- 컬럼의 크기는 늘릴 수 있지만 줄이지는 못한다. 이는 기존 데이터가 훼손될 수 있기 때문
- 해당 컬럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 컬럼의 폭을 줄이 수 있다.
- 해당 컬럼이 NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있다.
- 해당 컬럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
- 해당 컬럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.
- RENAME COLUMN
라. DROP CONSTRAINT
마. ADD CONSTRAINT
4. RENAME TABLE
5. DROP TABLE
6. TRUNCATE TABLE
- 테이블 삭제 없이, 테이블에 존재하는 모든 행을 제거하며, 저장 공간을 재사용 가능하도록 해제한다.
- TRUNCATE로 삭제한 데이터는 복구가 불가능하다.
- TRUNCATE TABLE는 데이터 구조의 변경 없이 테이블의 데이터를 일괄 삭제하는 명령어로 내부 처리 방식이나 Auto Commit 특성 등으로인해 DDL에 포함
- DELETE 보다 시스템 부하가 적으며(Undo Log 사용 안함), 복구 불가능
반응형
'SQLD > SQL 전문가 가이드' 카테고리의 다른 글
| 2.1.4 제4절 TCL (0) | 2024.11.05 |
|---|---|
| 2.1.3 제3절 DML (0) | 2024.11.04 |
| 2.1.1 제1절 관계형 데이터베이스 개요 (0) | 2024.10.23 |
| 1.2.6 제6절 분산 데이터베이스와 성능 (0) | 2021.08.23 |
| 1.2.5 제5절 데이터베이스 구조와 성능 (0) | 2021.08.23 |