본문 바로가기

자격증/SQLD

SQLD 2과목 1-2장. DDL

[ 목차 ]

1. 데이터 유형과 특징

2. 데이터 유형 종류

3. 두 문자열(CHAR, VARCHAR) 유형의 비교4. 테이블과 칼럼의 정의

4. 테이블과 칼럼의 정의

5. 테이블 생성과 조건 CREATE TABLE

6. 제약조건

7. 제약조건의 종류

8. NULL의 DEFAULT의 의미

9. 생성된 테이블 구조 확인

10. SELECT 문자을 통한 테이블 생성 사례

11. ALTER TABLE

12. RENAME TABLE

13. DROP TABLE

14. TUNCATE TABLE

 

1. 데이터 유형과 특징

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

2) 칼럼을 정의할 때 선언한 데이터 유형은 그 칼럼이 받아들일 수 이쓴 자료의 유형을 규정

3) 선언한 유형이 아닌 다른 종류의 데이터가 들어오려고 하면 데이터베이스는 에러를 발생

4) 데이터 유형과 더불어 지정한 크기도 중요한 기능을 제공

5) 선언 당시에 지정한 데이터의 크기를 넘어선 자료가 입력되는 상황도 에러를 발생시키는 중요한 요인

6) SQL server, Sybase는 숫자타입의 경우 작은 정수형, 정수형, 큰 정수형, 실수형 등 여러 타입의 숫자르 제공

    NUMERIC, DECLMAL, DEC, SMALLINT, INT, BIGINT, FLOAT, REAL, DOUBLE PRECISION, MONEY, SMALLMONEY

7) 오라클은 숫자타입의 경우 NUMBER 한 가지 숫자 타입의 유형만 제공

 

2. 데이터 유형 종류

1) CHARACTER(s) (=CHAR)

  1] 고정 길이 문자열 정보

  2] s만큼 최대 길이를 갖고 항당된 변수 값의 길이가 s보다 작을 경우 그 차이 길이만큼 공간으로 채워짐

2) VARCHARS(s)

  1]  CHARACTER VARCHAR의 약자로, 가변 길이 문자열 정보

  2] s만큼 최대 길이를 갖고 가변 길이로 조정되기 때문에 할당된 변수값의 바이트만 적용

3) NUMERIC

  1] 정수, 실수 등 숫자 정보

  2] 오카릌ㄹ은 처음에 전체 자리 수를 지정하고 그 다음 소수 부분의 자리 수를 지정

4) DATETIME

  1] 날짜와 시각 정보

 

3. 두 문자열(CHAR, VARCHAR) 유형의 비교

1) 문자열 사용시 저장 영역과 문자열의 비교 방법으로 둘 중 하나 선택

2) VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기 뿐이기 때문에 길이가 다양한 칼럼, 정의된 길이

   와 실제 데이터 길이에 차이가 있는 칼럼에 적합하며 저장 측면에서도 CHAR 보다 작은 영역에 저장가능한 장점 보유

3) CHAR 에서 문자열 비교시 짧은 쪽 끝에 공백을 추가하여 비교하며 데이터가 같은 길이가 되면 앞에서 한문자씩 비교

4) 끝의 공백만 다른 문자열은 같다고 판단되며 VARCHAR은 맨 처음부터 한 문자씩 비교하며 공백도 문자로 취급

5) 주민등록번호나 사번처럼 자료가 고정된 길이의 문자열을 가지지 않는다면 VARCHAR 적용이 바람직

6) 문자열에 대한 최대 길이와 NUMBER 칼럼의 정밀도를 지정하는 것을 테이블 설계시 고려해야할 중요 요소

 

4. 테이블과 칼럼의 정의

1) 테이블은 일정한 형식에 의해 생성되며,  해당 테이블에 입력될 데이터를 정의하고 데이터의 유형을 선언해야 함

2) 테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들

   (후보키) 중에 하나를 선정하여 기본키 칼럼으로 지정

3) 기본키는 단일 칼럼이 아닌 여러 개의 칼럼으로 만들어 질 수 있음

4) 테이블과 테이블 간에 정의된 관계는 기본키와 외부키를 활용해서 설정

 

5. 테이블 생성과 조건 CREATE TABLE

1) 테이블 생성 구문 : CREATE TABLE 테이블이름( 칼럼명1 DATATYPE [DEFAULT 형식], 칼럼명2 DATATYPE ........) ;

2) 테이블명은 객체를 의미할 수 잇는 적절한 이름을 사용하며 가능한 단수형 권고

2) 다른 테이블의 이름과 중복 X

3) 한 테이블 내에서 칼럼명 중복 X

4) 테이블 이름을 지정하고 각 칼럼들은 괄호로 묶어 지정

5) 각 칼럼들은 콤마로 구분되고(마지막 칼럼은 X), 테이블 생성문의 끝은 항상 세미콜론으로 종료

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

7) 칼럼 뒤에 데이터 유형은 꼭 지정

8) 테이블명과 칼럼명은 반드시 문자고 시작하고, 벤더별로 길이에 대한 한계 존재

9) 벤더는 사전에 정의한 예약어 사용 불가

10) A-Z, a-z, 0-9, _, $, # 문자만 허용

11) 다른 테이블의 칼럼 이름과는 같을 수 있음

12) 같은 이름을 가진 칼럼들은 기본키와 외래키의 관계를 가지는 경우가 많으며 향후 테이블 간의 조인 조건으로 주요

     사용되는 중요한 연결고리 칼럼

13) 테이블 생성시 대/소문자 구분하지 안흐며 기본적으로 테이블, 칼럼명은 대문자로 생성

14) DATETIME 데이터 유형은 별도로 크기 지정X

15) 문자 데이터 유형은 반드시 가질수 있는 최대 길이를 표시

16) 칼럼에 대한 제약조건이 있으면 CONSTRAINT를 이용하여 추가

17) 제약조건은 칼럼의 데이터 유형 뒤에 NOT NULL을 정의한 사례와 같은 칼럼 LEVEL 정의 방식과 테이블 생성 마지막

     에 모든 제약조건을 기술하는 테이블 LEVEL 정의 방식이 존재하며, 하나의 SQL 문장 내에서 혼용해서 사용할 수 있

     고 기능이 같음

 

6. 제약조건

1) 사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방

   법으로, 테이블의 특정 칼럼에 설정하는 제약

2) 테이블을 생성할 때 제약조건을 반드시 기술할 필요는 없지만 이후 추가할 경우 어렵기 때문에 처음에 검토

 

7. 제약조건의 종류

1) PRIMARY KEY(기본키)

  1] 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키

  2] 하나의 테이블에 하나의 기본키 제약만 정의 가능

  3] 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며 기본키를 구성하는 칼럼은 NULL입력 불가

  4] 기본키 제약 = 고유키 제약 & NOT NULL 제약

2) UNIQUE KEY(고유키)

  1] 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키

  2] NULL은 고유키의 제약 대상이 아니기에 NULL값을 가진 행이 여러개 있어도 고유키 제약 위반이 아님

3) FOREIGN KEY(외래키)

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

  2] 외래키 지정시 참조 무결성 제약 옵션을 선택 가능

4) NOT NULL

  1] NULL 값의 입력을 금지

  2] 디폴트 상태에서는 모든 칼럼에서 NULL을 허가하지만 해당 제약 지정으로 해당 칼럼은 입력 필수

  3] NOT NULL을 CHECK의 일부분으로 이해 가능

5) CHECK

  1] 입력할 수 있는 값의 범위 등을 제한

  2] TRUE or FALSE로 평가할 수 있는 논리식을 지정

 

8. NULL과 DEFAULT의 의미

1) NULL

  1] 공백이나 숫자 0과는 전혀 다른 값으로, 조건에 맞는 데이터가 없을 때의 공집합과도 다름

  2] 아직 정의도지 않은 미지의 값이거나 현재 데이터를 입력하지 못하는 경우를 의미

2) DEFAULT

  1] 데이터 입력시 명시된 값을 지정하지 않은 경우 NULL 값이 입력되지만, DEFAULT 값을 정의했다면 해당 칼럼에 사

      전에 정의된 기본 값이 자동 입력

 

 9. 생성된 테이블 구조 확인

1) 오라클 : DESCRIBE 테이블명;  또는 DESC 테이블명;

2) SQL : sp_help 'dbo.테이블명'

 

10. SELECT 문자을 통한 테이블 생성 사례

1) SELECT 문장을 활용해 테이블을 생성할 수 있는 방법(CTAS)을 이용한다면 칼럼별로 데이터 유형을 다시 재정의 하지

   않아도 되는 장점이 존재(Create Table ~ As Select~)

2) 그러나 기존 테이블의 제약조건 중에 NOT NULL만 복제 테이블에 적용되며 기본키, 고유키, 외래키, CHECK등의 제약

   조건은 제거

3) 제약조건을 추가하기 위해서는 ALTER TABLE 기능을 사용

4) SQL에서는 Select ~ into ~ 를 활용하여 위와 같은 결과 가능

5) 칼럼 속성에 identity를 사용했다면 해당 속성까지 같이 적용

 

11. ALTER TABLE

1) 한번 생성된 테이블은 특별히 사용자가 구조를 변경하기 전가지 생성 당시의 구조를 유지

2) 칼럼을 추가/삭제하거나 제약조건을 추가/삭제하는 작업

3) ADD COLUMN

  1] 기존 테이블에 필요한 칼럼을 추가하는 명령

  2] ALTER TABLE 테이븡명 ADD 추가할칼럼명 데이터유형;

  3] 새롭게 추가된 칼럼은 테이블의 마지막 카럼이 되며 칼럼의 위치지정 불가

4) DROP COLUMN

  1] 테이블에서 필요없는 칼럼을 삭제하는 명령으로, 데이터의 유무 관계 없이 삭제 가능

  2] ALTER TABLE 테이블명 DROP COLUMN 삭제할칼럼명;

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

  4] 한 번 삭제되는 칼럼은 복구 불가능

5) MODIFY COLUMN

  1] 테이블의 칼럼에 대한 정의를 변경하는 명령

  2] 오라클 : ALTER TABLE 테이블명 MODIFY(칼럼명1 데이터유형 [DEFAULT식] [NOT NULL], ...);

  3] SQL : ALTER TABLE 테이블명 ALTER(칼럼명1 데이터유형 [DEFAULT식] [NOT NULL], ...);

  4] 기존 데이터 훼손 문제를 이유로 칼럼의 크기는 늘릴 수 있으나 줄일 수 없음

  5] 해당 칼럼이 NULL값만 가지고 있거나 테이블에 아무 행도 없다면 칼럼의 폭 줄이기 가능

  6] 칼럼이 NULL값만 가지고 있다면 데이터 유형 변경 가능

  7] 칼럼의 DEFAULT값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향

  8] 칼럼에 NULL값이 없을 경우에만 NOT NULL 제약조건 추가 가능

6) RENAME COLUMN

  1] 칼럼명을 어떤 이유로 불가피하게 변경해야 하는 경우 쓰이는 명령

  2] 오라클 : ALTER TABLE 테이블명 RENAME COLUMN 변경해야할칼럼명 TO 새로운칼럼명;

  3] SQL : sp_rename 변경해야할칼럼명, 새로운칼럼명, 'COLUMN';

7) DROP CONSTRAINT

  1] 테이블 생성 시 부여했던 제약조건을 삭제하는 명령

  2] ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;

8) ADD CONSTRAINT

  1] 테이블 생성 시 제약조건을 적용하지 않았다면 이후 필요에서 의해서 제약조건을 추가하는 명령

  2] ALTER TABLE 태이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);

  3] 참조 제약조건을 추가하면 참조하는 테이블의 같은이름 칼럼을 참조

  4] 즉, 외부키를 설정함으로써 실수에 의한 테이블 삭제, 필요한 데이터의 삭제 같은 불상사를 방지가능

 

12. RENAME TABLE

1) RENAME 명령어를 사용해 테이블의 이름을 변경

2) RENAME 변경전테이블명 TO 변경후테이블명;

 

13. DROP TABLE

1) 테이블을 잘못 만들었거나 더 이상 필요 없을 경우 삭제하는 명령

2) DROP TABLE 테이블명 [CASCADE CONSTRAINT];

3) DROP 명령어를 사용하면테이블의 모든 데이터와 구조를 삭제

4) CASCADE CONSTRAINT 옵션은 해당 테이블과 관계가 있던 참조되는 제약조건도 삭제함을 의미

5) SQL : CASCADE 옵션이 존재하지 않으며 테이블 삭제 전에 참조하는 외부키 제약조건 또는 참조 테이블을 먼저 삭제

 

14. TUNCATE TABLE

1) 테이블 자체가 삭제되는 것이 아닌 테이블에 들어있던 모든 행을 제거, 저장공간을 재사용 가능하도록 해제하는 명령

2) TURNCATE TABLE PLAYER;

3) 테이블 구조를 완전히 삭제하려면 13 이용

4) 13의 경우 테이블 구조를 확인할 수 없으나 TURNCATE TABLE은 구조는 유지하며 데이터만 삭제

5) 테이블 전체 데이터를 삭제할 경우 시스템 활용 측면에서 DELETE TABLE보다 시스템 부하가 적은 해당 방법을 권고

6) TURNCATE TABLE의 경우 정상적인 복구가 불가능하기에 주의