SQLD자격증독학

[SQLD자격증독학] 20. DDL

i-moo 2017. 1. 22. 15:17
반응형

데이터 유형

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

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


- CHARCTER(s)

> 고정 길이 문자열 정보

> s는 기본 길이 1바이트

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

- VARCHAR(s)

> CHARACTER VARYING의 약자

> 가변 길이 문자열 정보

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

- NUMERIC

> 정수, 실수 등 숫자 정보

- DATETIME

> 날짜와 시각 정보


-> CHAR 유형 : 'AA' = 'AA '

VARCHAR유형 : 'AA' != 'AA '


CREATE TABLE

CREATE TABLE 테이블이름 (

칼럼명1 DATATYPE [DEFAULT 형식],

칼럼명1 DATATYPE [DEFAULT 형식],

칼럼명1 DATATYPE [DEFAULT 형식]

);

- 테이블 생성 시에 주의해야 할 규칙

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

> 테이블명은 다른 테이블의 이름과 중복 X

> 한 테이블 내에서는 칼럼명이 중복 X

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

> 각 칼럼들은 콤마 ","로 구분

> 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝남

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

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

> 테이블명과 칼럼명은 반드시 문자로 시작, 벤더별로 길이에 대한 한계가 O

> 벤더에서 사전에 정의한 에약여 (Reserved word)는 쓸 수 X

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


> 대/소문자 구분 X, 테이블이나 칼럼명은 대문자로 만들어짐

> 제약조건이 있으면 CONSTRAINT를 이용하여 추가 O


제약조건 (CONSTRAINT)

- 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약

- 제약조건의 종류

> PRIMARY KEY (기본키)

-> UNIQUE 인덱스 생성

-> 기본키 제약 = 고유키 제약 & NOT NULL 제약

> UNIQUE KEY (고유키)

-> 행 데이터를 고유하게 식별하기 위한 고유키를 정의

-> NULL 값을 가진 행 가능

> NOT NULL

-> NULL 값의 입력을 금지

-> 해당 칼럼은 입력 필수

-> CHECK의 일부분으로 이해 할 수 O

> CHECK

-> 입력할 수 잇는 값의 범위 등을 제한

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

> FOREIGN KEY

-> 참조 무결성 제약 옵션을 선택 할 수 O

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

- DEFAULT : 기본값, 사전에 정의된 값

생성된 테이블 구조 확인

- ORACLE : "DESCRIBE 테이블명;", "DESC 테이블명;"

- SQL Server : "exec sp_help 'dbo.테이블명'" -> "go"


CTAS : Create Table ~ As Select ~

- SELECT 문장을 활용해서 테이블을 생성할 수 있는 방법

- 칼럼별로 데이터 유형을 다시 재정의 하지 않아도 된다는 장점

- 주의할 점 : 기존 테이블의 제약조건 중에 NOT NULL 만 새로운 복제 테이블에 적용 되고 , 기본키 고유키 외래키 등 다른 제약 조건은 없어진다    -> 제약조건을 추가하기 위해서 ALTER TABLE 기능을 사용해야함

- SQL Server : Select ~ Into ~ -> 칼럼 속성에 Identity를 사용했다면 Identity 속성까지 같이 적용 O


- ORACLE : CREATE TABLE TEAM_TEMP

    AS SELECT * FROM TEAM;

- SQL Server : SELECT * INTO TEAM_TEMP FROM TEAM;


ALTER TABLE

- ADD COLUMN

> ALTER TABLE 테이블명    

   ADD 추가할 칼럼명 데이터 유형;

-> ORACLE : ALTER TABLE PLAYER

    ADD (ADDRESS VARCHAR2(80));

-> SQL Server : ALTER TABLE PLAYER

  ADD ADDRESS VARCHAR(80);


- DROP COLUMN

> ALERT TABLE 테이블명

   DROP COLUMN 삭제할 칼럼명;

-> ORACLE : ALTER TABLE PLAYER

DROP COLUMN ADDRESS;

-> SQL Server : ALTER TABLE PLAYER

         DROP COLUMN ADDRESS;


- MODIFY COLUMN

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

-> ORACLE : ALTER TABLE 테이블명

      MODIFY ( 칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],

칼럼명2 데이터유형 ... );

-> SQL Server : ALTER TABLE 테이블명

         ALTER ( 칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],

칼럼명2 데이터유형 ... );

> 해당 칼럼의 크기는 늘릴 수는 있지만 줄이지는 못함

> 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미침

> 해당 칼럼에 NULL이 없을 경우 NOT NULL 제약조건 추가 


- RENAME COLUMN

> 칼렴명을 변경해야 하는 경우

ALTER TABLE 테이블명

RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명;

-> ORACLE : ALTER TABLE PLAYER

RENAME COLUMN PLAYER_ID TO TEMP_ID;

-> SQL Server : sp_rename 변경해야 할 칼럼명, 새로운 칼럼명, 'COLUMN';

sp_rename 'dbo.TEAM_TEMP.TEAM_ID', 'TEAM_TEMP_ID', 'COLUMN';

(엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다.)


- DROP CONSTRAINT

> 제약조건을 삭제하는 명령어

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

-> (PLAYER 테이블의 외래키 제약조건 삭제)

-> ORACLE : ALTER TABLE PLAYER

DROP CONSTRAINT PLAYER_FK;

-> SQL Server : ALTER TABLE PLAYER

    DROP CONSTRAINT PLAYER_FK;


- ADD CONSTRAINT

> 제약조건 추가

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

-> (PLAYER 테이블의 TEAM_ID 칼럼이 TEAM 테이블의 TEAM_ID를 참조하는 조건)

-> ORACLE : ALTER TABLE PLAYER

ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

-> SQL Server : ALTER TABLE PLAYER

   ADD CONSTRAINT PLAYER_FK

   FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

-> DROP TABLE TEAM; -> ERROR : 외래키에 의해 참조되는 고유/기본키가 테이블에 있다. TEAM 테이블 삭제 할 수 없다.


RENAME TABLE

- ORACLE : RENAME 변경전 테이블명 TO 변경후 테이블명;

RENAME TEAM TO TEAM_BACKUP;

- SQL Server : sp_rename 변경전 테이블명, 변경후 테이블명;

sp_rename 'dbo.TEAM', 'TEAM_BACKUP';


DROP TABLE

DROP TABLE 테이블명 [CASCADE CONSTRAINT];

- CASCADE CONSTRAINT 옵션 : 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제한다는 것을 의미

- ORACLE : DROP TABLE PLAYER;

- SQL Server : DROP TABLE PLAYER;


TRUNCATE TABLE

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

- ORACLE : TRUNCATE TABLE PLAYER;

- SQL Server : TRUNCATE TABLE PLAYER;

반응형