[ SQLD : II. SQL 기본 및 활용] 1-2. DDL(Data Definition Language)

문지은·2023년 6월 3일
0

SQLD

목록 보기
12/30
post-thumbnail

[SQLD 시험 대비] 2과목. SQL 기본 및 활용 : 1장. SQL 기본 - 2. DDL(Data Definition Language)

DDL(Data Definition Language)

데이터 유형

CHARACTER(s)

  • 고정 길이 문자열 정보
    • Oracle, SQL Server 모두 CHAR로 표현
  • s는 기본 길이 1바이트, 최대 길이 Oracle 2,000바이트, SQL Server 8,000바이트
  • s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다.

VARCHAR(s)

  • CHARACTER VARYING의 약자로 가변 길이 문자열 정보
    • Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현
  • s는 최소 길이 1바이트, 최대 길이 Oracle 4,000
  • s만큼 최대 길이를 갖지만 가변길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용된다. (Limit 개념)
    • 가변 길이이므로 필요한 영역은 실제 데이터 크기 뿐
    • 따라서 길이가 다양한 칼럼과 정의된 길이와 실제 데이터 길이에 차이가 있는 칼럼에 적합
    • 저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있음
  • 문자열 끝의 공백만 다른 문자열은 같다고 판단하는 CHAR과 달리 VARCHAR 유형에서는 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단

NUMERIC

  • 정수, 실수 등 숫자 정보
    • Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 가지고 있음
  • Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다.
    • 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 ‘NUMBER(8,2)’와 같이 된다.

DATETIME

  • 날짜와 시각정보
    • Oracle은 DATE로 표현, SQL Server는 DATETIME으로 표현
  • Oracle은 1초 단위, SQL Server는 3.33ms(millisecond) 단위 관리

CREATE TABLE

테이블과 칼럼 정의

  • 테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 칼럼이나 칼럼의 조합들(후보키) 중에 하나를 선정하여 기본키 칼럼으로 지정
  • 기본키는 단일 칼럼이 아닌 여러 개의 칼럼으로 만들어 질 수 있으며 테이블과 테이블 간에 정의된 관계는 기본키(PRIMARY KEY)와 외부키(FOREIGN KEY)를 활용하여 설정
    • 선수 테이블에 선수의 소속팀 정보가 같이 존재한다고 가정하면, 특정 팀의 이름이 변경되었을 경우 그 팀에 소속된 선수 데이터를 일일이 찾아서 수정을 하거나, 또한 팀이 해체되었을 경우 선수 관련 정보까지 삭제되는 수정/삭제 이상(Anomaly) 현상이 발생할 수 있음
    • 팀 정보를 관리하는 팀 테이블을 별도로 분리해서 팀 ID와 팀 이름을 저장하고, 선수 테이블에서는 팀 ID를 외부키로 참조하게 해야 함.

CREATE TABLE

테이블 생성 구문 형식

CREATE TABLE 테이블이름 (
    칼럼명1 DATETYPE [DEFAULT 형식],
    칼럼명2 DATETYPE [DEFAULT 형식],
    칼럼명3 DATETYPE [DEFAULT 형식],
) ;

테이블 생성 규칙

  • 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
  • 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
  • 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
  • 테이블 이름을 지정하고 각 칼럼들은 괄호 "( )" 로 묶어 지정한다.
  • 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.
  • 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용 하는 것이 좋다.(데이터 표준화 관점)
  • 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
  • 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
  • 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.
  • A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
  • 테이블명이 잘못된 사례
    • 10_PLAYER : 숫자가 아닌 문자로 시작되어야 함
    • T-PLAYER : 특수문자 ‘-’ 는 허용되지 않음

테이블 생성예제

  • 아래 조건과 같은 선수 테이블을 생성해보자.
테이블명 : PLAYER
테이블 설명 : K-리그 선수들의 정보를 가지고 있는 테이블
칼럼명 : PLAYER_ID (선수ID) 문자 고정 자릿수 7자리, 
             PLAYER_NAME (선수명) 문자 가변 자릿수 20자리, 
             TEAM_ID (팀ID) 문자 고정 자릿수 3자리, 
             E_PLAYER_NAME (영문선수명) 문자 가변 자릿수 40자리,
             NICKNAME (선수별명) 문자 가변 자릿수 30자리,
             JOIN_YYYY (입단년도) 문자 고정 자릿수 4자리, 
             POSITION (포지션) 문자 가변 자릿수 10자리,
             BACK_NO (등번호) 숫자 2자리,
             NATION (국적) 문자 가변 자릿수 20자리,
             BIRTH_DATE (생년월일) 날짜,
             SOLAR (양/음) 문자 고정 자릿수 1자리,
             HEIGHT (신장) 숫자 3자리,
             WEIGHT (몸무게) 숫자 3자리,
제약조건 : 기본키(PRIMARY KEY) → PLAYER_ID
               (제약조건명은 PLAYER_ID_PK)
               값이 반드시 존재 (NOT NULL) → PLAYER_NAME, TEAM_ID
  • Oracle
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR2(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR2(40),
NICKNAME VARCHAR2(30),
JOIN_YYYY CHAR(4),
POSITION VARCHAR2(10),
BACK_NO NUMBER(2),
NATION VARCHAR2(20),
BIRTH_DATE DATE,
SOLAR CHAR(1),
HEIGHT NUMBER(3),
WEIGHT NUMBER(3),
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID) 
);
  • SQL Server
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 TINYINT,
NATION VARCHAR(20),
BIRTH_DATE DATE,
SOLAR CHAR(1),
HEIGHT SMALLINT,
WEIGHT SMALLINT,
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID) 
);

테이블 생성예제에서 추가 주의사항

  • 테이블 생성시 대/소문자 구분은 하지 않는다. 기본적으로 테이블이나 칼럼명은 대문 자로 만들어진다.
  • DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다.
  • 문자 데이터 유형은 반드시 가질 수 있는 최대 길이를 표시해야 한다.
  • 칼럼과 칼럼의 구분은 콤마로 하되, 마지막 칼럼은 콤마를 찍지 않는다.
  • 칼럼에 대한 제약조건이 있으면 CONSTRAINT를 이용하여 추가할 수 있다.

제약조건(CONSTRAINT)

  • 사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이 터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약
  • 테이블을 생성할 때 제약조건을 반드시 기술할 필요는 없지만, 이후에 ALTER TABLE을 이용해서 추가, 수정하는 경우 데이터가 이미 입력된 경우라면 처리과정이 쉽지 않기 때문에 초기 테이블 생성 시점부터 작성하는게 바람직

제약조건의 종류

  • PRIMARY KEY(기본키)
    • 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의
    • 하나의 테이블에 하나의 기본키 제약만 정의할 수 있음.
    • 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 칼럼에는 NULL을 입력할 수 없음.
  • UNIQUE KEY(고유키)
    • 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의
    • 단, NULL은 고유키 제약의 대상이 아니므로, NULL 값을 가진 행이 여러 개가 있더라도 고유키 제약 위반이 되지 않음
  • NOT NULL
    • NULL 값의 입력을 금지
    • 디폴트 상태에서는 모든 칼럼에서 NULL을 허가하고 있지만, 이 제약을 지정함으로써 해당 칼럼은 입력 필수가 됨
    • NOT NULL을 CHECK의 일부분으로 이해할 수도 있음
  • CHECK
    • 입력할 수 있는 값의 범위 등을 제한
    • CHECK 제약으로는 TRUE or FALSE로 평가할 수 있는 논리식을 지정
  • FOREIGN KEY(외래키)
    • 관계형 데이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성
    • 외래키 지정 시 참조 무결성 제약 옵션을 선택할 수 있음

NULL의 의미

  • ‘아직 정의되지 않은 미지의 값’이거나 ‘현재 데이터를 입력하지 못하는 경우’를 의미
  • NULL(ASCII 코드 00번)은 공백(BLANK, ASCII 코드 32번)이나 숫자 0(ZERO, ASCII 48)과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다름
  • Null과의 모든 비교(IS NULL제외)는 알 수 없음(Unknown)을 반환

DEFAULT

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

테이블 생성 예제

  • 아래 조건과 같은 팀 테이블을 생성해보자.
테이블명 : TEAM
테이블 설명 : K-리그 선수들의 소속팀에 대한 정보를 가지고 있는 
테이블 칼럼명 : TEAM_ID (팀 고유 ID) 문자 고정 자릿수 3자리,
                       REGION_NAME (연고지 명) 문자 가변 자릿수 8자리,
                       TEAM_NAME (한글 팀 명) 문자 가변 자릿수 40자리, 
                       E-TEAM_NAME (영문 팀 명) 문자 가변 자릿수 50자리 , 
                       ORIG_YYYY (창단년도) 문자 고정 자릿수 4자리, 
                       STADIUM_ID (구장 고유 ID) 문자 고정 자릿수 3자리, 
                       ZIP_CODE1 (우편번호 앞 3자리) 문자 고정 자릿수 3자리, 
                       ZIP_CODE2 (우편번호 뒷 3자리) 문자 고정 자릿수 3자리, 
                       ADDRESS (주소) 문자 가변 자릿수 80자리,
                       DDD (지역번호) 문자 가변 자릿수 3자리,
                       TEL (전화번호) 문자 가변 자릿수 10자리,
                       FAX (팩스번호) 문자 가변 자릿수 10자리,
                       HOMEPAGE (홈페이지) 문자 가변 자릿수 50자리, 
                       OWNER (구단주) 문자 가변 자릿수 10자리,
제약조건 : 기본 키(PRIMARY KEY) → TEAM_ID
                 (제약조건명은 TEAM_ID_PK)
                 NOT NULL → REGION_NAME, TEAM_NAME, STADIUM_ID 
                 (제약조건명은 미적용)
  • Oracle

CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR2(8) NOT NULL,
TEAM_NAME VARCHAR2(40) NOT NULL,
E_TEAM_NAME VARCHAR2(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR2(80),
DDD VARCHAR2(3),
TEL VARCHAR2(10),
FAX VARCHAR2(10),
HOMEPAGE VARCHAR2(50),
OWNER VARCHAR2(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID) 
);
  • SQL Server

CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR(8) NOT NULL,
TEAM_NAME VARCHAR(40) NOT NULL,
E_TEAM_NAME VARCHAR(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR(80),
DDD VARCHAR(3),
TEL VARCHAR(10),
FAX VARCHAR(10),
HOMEPAGE VARCHAR(50),
OWNER VARCHAR(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);

생성된 테이블 구조 확인

  • Oracle
    • DESCRIBE 테이블명; 또는 DESC 테이블명;
  • SQL Server
    • sp_help ‘dbo.테이블명’

CTAS (Create Table ~ As Select ~)

  • SELECT 문장을 활용해서 테이블을 생성하는 방법
  • 기존 테이블을 이용한 CTAS 방법을 이용할 수 있다면 칼럼별로 데이터 유형을 다시 재정의 하지 않아도 되는 장점
  • CTAS 기법 사용시 주의할 점
    • 기존 테이블의 제약조건 중에 NOT NULL만 새로운 복제 테이블에 적용이 되고, 기본키, 고유키, 외래키, CHECK 등의 다른 제약 조건은 없어짐.
    • 따라서 제약 조건을 추가하기 위해서는 뒤에 나오는 ALTER TABLE 기능을 사용해야 함.

테이블 생성 예제

  • 선수(PLAYER) 테이블과 같은 내용으로 TEAM_TEMP라는 복사 테이블을 만들어 보자.
  • Oracle
CREATE TABLE TEAM_TEMP 
AS SELECT * FROM TEAM;
  • SQL Server
SELECT * INTO TEAM_TEMP FROM TEAM;

ALTER TABLE

  • 생성된 테이블을 사용하는 도중에 칼럼을 추가/삭제하거나 제약조건을 추가/삭제하는 작업

ADD COLUMN

  • 기존 테이블에 필요한 칼럼 추가
  • 새롭게 추가된 칼럼은 테이블의 마지막 칼럼이 되며 칼럼의 위치를 지정할 수는 없음
ALTER TABLE 테이블명
ADD 추가할 칼럼명 데이터 유형;

예제

  • PLAYER 테이블에 ADDRESS(데이터 유형은 가변 문자로 자릿수 80자리로 설정) 칼럼 추가해보자.
  • Oracle
ALTER TABLE PLAYER
ADD (ADDRESS VARCHAR2(80));
  • SQL Server
ALTER TABLE PLAYER
ADD ADDRESS VARCHAR(80);

DROP COLUMN

  • 테이블에서 필요 없는 칼럼을 삭제할 수 있으며, 데이터가 있거나 없거나 모두 삭제 가능
  • 한 번에 하나의 칼럼만 삭제 가능하며, 칼럼 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야함
  • 한 번 삭제된 칼럼은 복구가 불가능 하므로 주의해서 사용해야 함.
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;

예제

  • 앞에서 PLAYER 테이블에 새롭게 추가한 ADDRESS 칼럼을 삭제해보자.
  • Oracle
ALTER TABLE PLAYER 
DROP COLUMN ADDRESS;
  • SQL Server
ALTER TABLE PLAYER 
DROP COLUMN ADDRESS;

MODIFY COLUMN

  • 테이블에 존재하는 칼럼에 대해서 ALTER TABLE 명령을 이용해 칼럼의 데이터 유형, 디폴트(DEFAULT) 값, NOT NULL 제약조건에 대한 변경을 포함할 수 있음
  • Oracle
ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터 유형 [DEFAULT] [NOT NULL],
                 칼럼명2 데이터 유형 ...);
  • SQL Server
ALTER TABLE 테이블명
ALTER (칼럼명1 데이터 유형 [DEFAULT] [NOT NULL],
             칼럼명2 데이터 유형 ...);

칼럼 변경시 고려사항

  • 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다.
    • 기존의 데이터가 훼손될 수 있기 때문이다.
  • 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다.
    • 해당 칼럼이 NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있다.
  • 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
  • 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.

예제

  • 조건
    • TEAM 테이블의 ORIG_YYYY 칼럼의 데이터 유형을 CHAR(4)→VARCHAR2(8)으로 변경
    • 향후 입력되는 데이터의 DEFAULT 값으로 '20020129'을 적용
    • 모든 행의 ORIG_YYYY 칼럼에 NULL이 없으므로 제약조건을 NULL → NOT NULL로 변경
  • Oracle
ALTER TABLE TEAM_TEMP
MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
  • SQL Server
ALTER TABLE TEAM_TEMP
ALTER COLUMN ORIG_YYYY VARCAHR(8) NOT NULL;

ALTER TABLE TEAM_TEMP
ADD CONSTRAINT DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY;

RENAME COLUMN

  • 테이블을 생성하면서 만들었던 칼럼명을 불가피하게 변경해야할 때 사용하는 명령어
ALTER TABLE 테이블명
RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명
  • RENAME COLUMN으로 칼럼명이 변경되면, 해당 칼럼과 관계된 제약조건에 대해서도 자동으로 변경되는 장점이 있음
  • 그러나 ADD/DROP COLUMN 기능처럼 ANSI/ISO에 명시되어 있는 기능이 아니고 Oracle 등 일부 DBMS에서만 지원하는 기능임
  • SQL Server에서는 sp_rename 저장 프로시저를 이용하여 칼럼 이름을 변경할 수 있음
    • 주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있음.
sp_rename 변경해야 할 칼럼명, 새로운 칼럼명, 'COLUMN';

예제

  • Oracle
ALTER TABLE PLAYER
RENAME COLUMN PLAYER_ID TO TEMP_ID;

ALTER TABLE PLAYER
RENAME COLUMN TEMP_ID TO PLAYER_ID;
  • SQL Server
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 테이블과의 외래키 제약조건을 추가한다.
    • 제약조건명은 PLAYER_FK로 하고, 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);

참조 무결성 옵션 확인하기

  • 위와 같이 참조 제약조건을 추가하면 PLAYER 테이블의 TEAM_ID 칼럼이 TEAM 테이블의 TEAM_ID 칼럼을 참조하게 됨.
  • 참조 무결성 옵션에 따라서 만약 TEAM 테이블이나 TEAM 테이블의 데이터를 삭제하려 할 경우 외부(PLAYER 테이블)에서 참조되고 있기 때문에 삭제가 불가능하게 제약을 할 수 있음.
  • 즉, 외부키(FK)를 설정함으로써 실수에 의한 테이블 삭제나 필요한 데이터의 의도하지 않은 삭제와 같은 불상사를 방지하는 효과를 볼 수 있음.
  • PLAYER 테이블이 참조하는 TEAM 테이블을 제거해보자.
// Oracle
DROP TABLE TEAM;
ERROR: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있다. 테이블은 삭제되지 않음

// SQL Server
DROP TABLE TEAM;
ERROR: 엔터티 'TEAM'FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다.
  • PLAYER 테이블이 참조하는 TEAM 테이블의 데이터를 삭제해보자.
// Oracle
DELETE TEAM
WHERE TEAM_ID = 'K10';
ERROR: 무결성 제약조건(SCOTT.PLAYER_FK)이 위배되었다. 자식 레코드가 발견되었다. ※ 데이터는 삭제되지 않음

// SQL Server
DELETE TEAM
WHERE TEAM_ID = 'K10';
ERROR: FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다. ※ 데이터는 삭제되지 않음

RENAME TABLE

  • RENAME 명령어를 사용하여 테이블의 이름을 변경할 수 있음
  • Oracle
RENAME 변경전 테이블명 TO 변경후 테이블명;
  • SQL Server
sp_rename 변경전 테이블명, 변경후 테이블명;

예제

  • RENAME 문장을 이용하여 TEAM 테이블명을 다른 이름으로 변경하고, 다시 TEAM 테이블로 변경해보자.
  • Oracle
RENAME TEAM TO TEAM_BACKUP;
RENAME TEAM_BACKUP TO TEAM;
  • SQL Server
sp_rename 'dbo.TEAM','TEAM_BACKUP';
// 주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다. sp_rename 'dbo.TEAM_BACKUP','TEAM';

DROP TABLE

  • 테이블의 모든 데이터 및 구조를 삭제하는 명령어
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
  • CASCADE CONSTRAINT 옵션
    • 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제한 다는 것을 의미
  • SQL Server에서는 CASCADE 옵션이 존재하지 않으며 테이블을 삭제하기 전에 참조하는 FOREIGN KEY 제약 조건 또는 참조하는 테이블을 먼저 삭제해야 함.

예제

  • PLAYER 테이블을 제거해보자.
  • Oracle
DROP TABLE PLAYER; 
  • SQL Server
DROP TABLE PLAYER;

TRUNCATE TABLE

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

예제

  • TRUNCATE TABLE을 사용하여 해당 테이블의 모든 행을 삭제해보자.
  • Oracle
TRUNCATE TABLE TEAM;
  • SQL Server
TRUNCATE TABLE TEAM;

DROP TABLE vs TRUNCATE TABLE

  • DROP TABLE의 경우는 테이블 자체가 없어지기 때문에 실행 후 테이블 구조를 확인할 수 없다.
  • 반면 TRUNCATE TABLE의 경우는 테이블 구조는 그대로 유지한 체 데이터만 전부 삭제하는 기능
  • 테이블에 있는 데이터를 삭제하는 명령어는 TRUNCATE TABLE 명령어 이외에도 다음 DML 절에서 살펴볼 DELETE 명령어가 있다.
  • 그러나 테이블의 전체 데이터를 삭제하는 경우, 시스템 활용 측면에서는 DELETE TABLE 보다는 시스템 부하가 적은 TRUNCATE TABLE을 권고한다.
  • 단, TRUNCATE TABLE의 경우 정상적인 복구가 불가능하므로 주의해야 한다!
profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글