IT/SQLD(SQL개발자)

[SQLD] DDL(Data Definition Language)

pandada 2019. 6. 23. 21:09
반응형

DDL(Data Definition Language)

-> 데이터 정의어

 

 

데이터 유형

  -> 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준

  -> 특정 칼럼을 정의할 때 선언한 데이터 유형은 그 칼럼이 받아들일 수 있는 자료의유형을 규정함.

  -> 선언한 유형이 아닌 다른 종류의 데이터가 들오려고 하면 에러가 발생됨

 

자주 쓰이는 데이터 유형

데이터 유형 

설명 

CHAR(number) 

 - 고정길이 문자열 정보

 - number는 기본 길이 1바이트

 - number만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 number보다 작을 경우에는 그 차이 길이만큼 빈 공간으로 채워짐 

VHARCHAR(number)

 - 가변 길이 문자열 정보

 - number는 최소 길이 1바이트

 - number 만큼의 최대 길이를 갖지만 가변길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용된다.(Limit 개념)

NUMERIC

 - 정수, 실수 등 숫자 정보

 - Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다.

 - ex) NUMERIC(8,2) -> 전체 8자리, 정수부분 6자리, 소수점 부분 2자리

DATE 

 - 날짜와 시각 정보 

 

중요사항!

  VARCHAR 유형은 가변길이임므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 칼럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 칼럼에 적합하다.

  CHAR 유형은 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. 공백 채우기 비교에서는 우선 짧은 쪽의 끝에 공백을 추가하여 2개의 데이터가 같은 길이가 되도록한다. 그리고 앞에서부터 한 문자씩 비교한다.

  ex) CHAR 유형 -> 'ABC'='ABC '     /     VARCHAR 유형 -> 'ABC' =/ 'ABC '

 

 

CREATE TABLE

  - 테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들 (후보키) 중에 하나를 선정하여 기본키 칼럼으로 지정한다.

  - 기본키는 단일 칼럼이 아닌 여러 개의 칼럼으로도 만들어질 수 있다. 그리고 테이블과 테이블 간에 정의된 관계는 기본키와 외부키를 활용해서 설정할 수 있다. 

테이블 생성 구문

 create table person(
   number int(10),                    (칼럼명 DATATYPE [DEFAULT 형식])
   first_name varchar(20),       (칼럼명 DATATYPE [DEFAULT 형식])
   last_name varchar(20)         (칼럼명 DATATYPE [DEFAULT 형식])
);

 

Caution

  - 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수를 권고한다.

  - 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.

  - 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.

  - 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )" 로 묶어 지정한다.

  - 각 칼럼들은 콤마(,)로 구분되고, 테이블 생성문의 끝은 항상 세미콜론(;)으로 끝난다.

  - 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용한다.

  - 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.

  - 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.

  - 예약어는 쓸 수 없다.

  - 반드시 숫자가 아닌 문자로 시작되어야함.

  - " - " 허용 불가 (따라서 밑줄을 씁니다. "_" 요거)

  - 한 테이블 안에서 칼럼 이름은 달라야 하지만, 다른 테이블의 칼럼 이름과는 같을 수 있다.

 

테이블 생성 시 예제

< 테이블 생성시 설명 >

 create table PLAYER (
    player_id char(7) NOT NULL,
    player_name varchar(20) NOT NULL,
    team_id char(3) NOT NULL,
    e_player_name varchar(40),
    nickname varchar(30),
    join_yyyy char(4),
    position varchar(10),
    back_no int(2),
    nation varchar(20),
    birth_date date,
    solar char(1),
    height int(3),
    weight int(3),
    primary key(player_id)
);

 

 

 

제약조건(CONSTRINT)

  - 사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약이다.

 

제약조건의 종류

구분 

설명 

PRIMARY KEY 

(기본키) 

 - 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의한다.

 - 하나의 테이블에 하나의 기본키 제약만 정의할 수 있다.

 - 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 칼럼에는 NULL을 입력할 수 없다.

 - 결국 '기본키 제약 = 고유키 제약 & NOT NULL 제약'이 된다. 

UNIQUE KEY 

 - 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의한다.

 - 단, NULL은 고유키 제약의 대상이 아니므로, NULL 값을 가진 행이 여러 개가 있더라도 고유키 제약 위반이 되지 않는다. 

NOT NULL 

 - NULL 값의 입력을 금지한다. 디폴트 상태에서는 모든 칼럼에서 NULL을 허가하고 있지만, 이 제약을 지정함으로써 해당 칼럼은 입력 필수가 된다.

 - NOT NULL을 CHECK의 일부분으로 이해할 수도 있다. 

CHECK 

입력할 수 있는 값의 범위 등을 제한한다. CHECK 제약으로는 TURE OR FALSE로 평가할 수 있는 논리식을 지정한다. 

FOREIGN KEY 

(외래키) 

 관계형 테이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성된다. 

외래키 지정시 참조 무결성 제약 옵션을 선택할 수 있다.

 

NULL 의미

  - 공백이나 숫자 0 과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다.

  - 아직 정의되지 않은 미지의 값 OR 현재 데이터를 입력하지 못하는 경우

 

DEFAULT 의미

  - 데이터 입력 시에 칼럼의 값이 지정되어 있지 않을 경우 기본값을 사전에 설정할 수 있다.

  - 데이터 입력시 명시된 값을 지정하지 않은 경우에 NULL값이 입력되고, 사전에 DEFAULT 값을 정의했다면 해당 칼럼 NULL 값이 입력되지 않고 사전에 정의된 기본 값이 자동으로 입력된다.

 

 

생성된 테이블 구조 확인

 DESC 테이블명;

 

< 테이블 구조 확인 >

 

ALTER TABLE

  - 주로 칼럼을 추가/삭제하거나 제약조건을 추가/삭제하는 작업을 진행.

 

ADD COLUMN

 alter table PLAYER ADD COLUMN pan_club varchar(20);

 

< 칼럼이 추가되어 있다. >

DROP COLUMN

  - 테이블에서 필요 없는 칼럼을 삭제할 수 있으며, 데이터가 있거나 없거나 모두 삭제 가능.

  - 한 번에 하나의 칼럼만 삭제 가능하며, 칼럼 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야함.

  - 한 번 삭제된 칼럼은 복구가 불가능

 alter table PLAYER drop column pan_club;

 

 

< Column이 삭제되어 있다. >

  

MODIFY COLUMN

- 테이블에 존재하는 칼럼에 대해서 ALTER TABLE 명령을 이용해 칼럼의 데이터 유형, DEFAULT값, NOT NULL 제약조건에 대한 변경을 포함할 수 있다.

- 테이블의 칼럼에 대한 정의를 변경하는 명령어.

 alter table PLAYER modify weight varchar(10);

 

< Modify Column의 예 >

Cation.

  - 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다. 이는 기존의 데이터가 훼손될 수 있기 때문

  - 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다.

  - 해당 칼럼이 NULL 값만 가지고 있으면 데이터 유형을 변경할 수 있다.

  - 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입만 영향을 미치게 된다.

  - 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.

 

 

RENAME TABLE

 - 테이블의 이름 바꾸기

 rename table PLAYER to llllll;

 

< 변경된 이름으로 테이블 검색 >

DROP TABLE

 -테이블을 잘못 만들었거나 테이블이 더 이상 필요 없을 경우 해당 테이블 삭제

 DROP table llllll;

 

TRUNCATE TABLE

 - 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을

    재사용 가능하도록 해제한다.

 truncate table girls;

 

반응형