데이터 유형은 데이터베이스 테이블의 특정 칼럼에 입력될 자료의 종류를 정의하는 기준이다. 즉, 특정 칼럼을 정의할 때 지정한 데이터 유형은 그 칼럼이 받아들일 수 있는 데이터의 종류를 규정합니다. 예를 들어, 선수를 저장하는 테이블에서 ‘몸무게’ 칼럼에 ‘숫자’ 타입을 지정하면, 이 칼럼은 숫자만 입력받을 수 있고, 문자가 입력되면 에러가 발생한다.
데이터 유형과 더불어 크기(Size)도 중요하다. 선언 시 지정한 크기를 넘는 데이터가 입력되면 에러를 발생시키기 때문이다. 예를 들어 VARCHAR(40)으로 정의된 칼럼에는 최대 40자의 문자열만 입력할 수 있다.

데이터베이스 시스템은 다양한 데이터 유형을 제공합니다. 벤더별로 SQL 문법 차이는 점차 줄어들고 있지만, 데이터 유형과 내장 함수에서는 여전히 차이가 큽니다. 데이터베이스 내부 구조도 각기 다르지만, 여기서는 데이터 유형에 집중하겠습니다.
ANSI/ISO 표준에서는 NUMERIC Type 하위 개념으로 다양한 숫자 타입을 정의한다. 예를 들어, NUMERIC, DECIMAL, DEC, SMALLINT, INTEGER, INT, BIGINT, FLOAT, REAL, DOUBLE PRECISION 등이 있다. SQL Server와 Sybase는 이를 기반으로 작은 정수형, 정수형, 큰 정수형, 실수형 등의 숫자 타입을 제공하며, 추가로 MONEY, SMALLMONEY 등의 타입도 있다. 반면, Oracle은 NUMBER라는 하나의 숫자 타입만 지원한다.
문자열 데이터 유형에는 주로 CHAR와 VARCHAR가 사용된다. 이 둘의 차이는 저장 방식과 문자열 비교 방법에 있다.
예를 들어, VARCHAR(40)으로 정의된 칼럼에 ‘PARK,JISUNG’이 입력되면, 실제 데이터 길이인 11바이트만 차지합니다. 길이가 고정되지 않은 문자열 데이터의 경우 VARCHAR를 사용하는 것이 바람직하다.
CREATE TABLE 문은 데이터베이스에서 테이블을 생성하는 SQL 명령어이다. 테이블은 데이터가 저장되는 구조이며, 각 데이터의 속성(칼럼)과 데이터 유형을 정의해야 한다. 테이블을 생성하기 위해서는 다음 단계를 따라야 한다
CREATE TABLE 테이블이름 (
칼럼명1 데이터유형 [DEFAULT 값],
칼럼명2 데이터유형 [DEFAULT 값],
...
[제약조건]
);
K-리그 선수 정보를 저장하는 PLAYER 테이블을 생성하는 예제이다.
-- 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)
);
주의사항 및 규칙
A-Z, a-z, 0-9, _, $, # 문자만 허용됩니다.예제 설명
제약조건(CONSTRAINT)은 데이터베이스의 무결성을 유지하기 위해 테이블의 특정 칼럼에 설정하는 조건이다. 이는 데이터가 정확하고 일관성 있게 유지되도록 보장하는 역할을 한다.
제약조건은 특정 조건을 만족하는 데이터만 테이블에 저장되도록 하는 방법이다. 테이블 생성 시 제약조건을 설정하면, 이후 데이터 입력 및 수정 시 자동으로 제약조건이 적용된다. 제약조건은 테이블 생성 시점에 설정하는 것이 좋다. 나중에 ALTER TABLE 명령으로 제약조건을 추가하거나 수정하는 경우 데이터가 이미 존재하면 복잡한 처리 과정을 거쳐야 하기 때문이다.

주요 제약조건의 종류는 다음과 같다.
K-리그 팀 정보를 저장하는 TEAM 테이블을 생성하는 예제를 통해 제약조건을 살펴보자.
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)
);
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)
);
테이블을 생성한 후에는 테이블의 구조가 올바르게 생성되었는지 확인하는 것이 중요하다. 이를 위해 각 DBMS에서 제공하는 명령어를 사용할 수 있다.
명령어: DESCRIBE 테이블명; 또는 DESC 테이블명;
DESC PLAYER;
-- 결과
칼럼 NULL 가능 데이터 유형
------------- --------- --------------
PLAYER_ID NOT NULL CHAR(7)
PLAYER_NAME NOT NULL VARCHAR2(20)
TEAM_ID NOT NULL CHAR(3)
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)
exec sp_help 'dbo.PLAYER';
-- 결과
칼럼이름 데이터 유형 길이 NULL 가능
------------ ----------- ---- ---------
PLAYER_ID CHAR(7) 7 NO
PLAYER_NAME VARCHAR(20) 20 NO
TEAM_ID CHAR(3) 3 NO
E_PLAYER_NAME VARCHAR(40) 40 YES
NICKNAME VARCHAR(30) 30 YES
JOIN_YYYY CHAR(4) 4 YES
POSITION VARCHAR(10) 10 YES
BACK_NO TINYINT 1 YES
NATION VARCHAR(20) 20 YES
BIRTH_DATE DATE 3 YES
SOLAR CHAR(1) 1 YES
HEIGHT SMALLINT 2 YES
WEIGHT SMALLINT 2 YES
기존 테이블의 데이터를 새로운 테이블로 복사하여 생성할 수 있다. 이를 통해 데이터 유형을 다시 정의하지 않아도 되며, NOT NULL 제약 조건만 적용된다. 기본키, 고유키, 외래키, CHECK 등의 다른 제약 조건은 새로운 테이블에 자동으로 적용되지 않으므로, 필요시 ALTER TABLE 명령을 사용해야 한다.
CREATE TABLE TEAM_TEMP AS SELECT * FROM TEAM;
-- 결과 확인
DESC TEAM_TEMP;
-- 결과
칼럼 NULL 가능 데이터 유형
------------- ----------- --------------
TEAM_ID NOT NULL CHAR(3)
REGION_NAME NOT NULL VARCHAR2(8)
TEAM_NAME NOT NULL VARCHAR2(40)
E_TEAM_NAME VARCHAR2(50)
ORIG_YYYY CHAR(4)
STADIUM_ID NOT NULL CHAR(3)
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)
SELECT * INTO TEAM_TEMP FROM TEAM;
-- 결과 확인
exec sp_help 'dbo.TEAM_TEMP';
-- 결과
칼럼이름 데이터 유형 길이 NULL 가능
------------ ----------- ---- ---------
TEAM_ID CHAR(3) 3 NO
REGION_NAME VARCHAR(8) 8 NO
TEAM_NAME VARCHAR(40) 40 NO
E_TEAM_NAME VARCHAR(50) 50 YES
ORIG_YYYY CHAR(4) 4 YES
STADIUM_ID CHAR(3) 3 NO
ZIP_CODE1 CHAR(3) 3 YES
ZIP_CODE2 CHAR(3) 3 YES
ADDRESS VARCHAR(80) 80 YES
DDD VARCHAR(3) 3 YES
TEL VARCHAR(10) 10 YES
FAX VARCHAR(10) 10 YES
HOMEPAGE VARCHAR(50) 50 YES
OWNER VARCHAR(10) 10 YES
이렇게 생성된 테이블의 구조를 확인하면, 데이터 유형과 NULL 가능 여부 등을 확인할 수 있다. CTAS(CREATE TABLE AS) 방법을 통해 테이블을 생성할 때 주의할 점은 기존 테이블의 일부 제약 조건이 새로운 테이블에 적용되지 않는다는 것이다. 필요한 경우, 추가적인 제약 조건을 ALTER TABLE 문을 통해 설정해야 한다.
테이블이 처음 생성된 후, 시간이 지나면서 업무적인 요구 사항이나 시스템 운영상의 이유로 테이블의 구조를 변경해야 할 일이 생길 수 있다. 이를 위해 ALTER TABLE 명령을 사용하여 테이블의 구조를 수정할 수 있다. 주로 칼럼을 추가/삭제하거나 제약조건을 추가/삭제하는 작업이 이루어진다.
기존 테이블에 새로운 칼럼을 추가할 때 사용되는 명령이다.
ALTER TABLE 테이블명 ADD 추가할 칼럼명 데이터 유형;
주의사항으로, 새롭게 추가된 칼럼은 테이블의 마지막 칼럼이 되며, 칼럼의 위치를 지정할 수 없다.
ALTER TABLE PLAYER ADD (ADDRESS VARCHAR2(80));
-- 결과 확인
DESC PLAYER;
-- 결과
칼럼 NULL 가능 데이터 유형
------------- --------- --------------
PLAYER_ID NOT NULL CHAR(7)
PLAYER_NAME NOT NULL VARCHAR2(20)
TEAM_ID NOT NULL CHAR(3)
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)
ADDRESS VARCHAR2(80) -- 추가된 열
ALTER TABLE PLAYER ADD ADDRESS VARCHAR(80);
-- 결과 확인
exec sp_help 'dbo.PLAYER';
-- 결과
칼럼이름 데이터 유형 길이 NULL 가능
------------ ----------- ---- ---------
PLAYER_ID CHAR(7) 7 NO
PLAYER_NAME VARCHAR(20) 20 NO
TEAM_ID CHAR(3) 3 NO
E_PLAYER_NAME VARCHAR(40) 40 YES
NICKNAME VARCHAR(30) 30 YES
JOIN_YYYY CHAR(4) 4 YES
POSITION VARCHAR(10) 10 YES
BACK_NO TINYINT 1 YES
NATION VARCHAR(20) 20 YES
BIRTH_DATE DATE 3 YES
SOLAR CHAR(1) 1 YES
HEIGHT SMALLINT 2 YES
WEIGHT SMALLINT 2 YES
ADDRESS VARCHAR(80) 80 YES -- 추가된 열
DROP COLUMN은 테이블에서 더 이상 필요하지 않은 칼럼을 삭제할 때 사용하는 명령어이다. 삭제하려는 칼럼에 데이터가 있든 없든 상관없이 삭제가 가능하다. 하지만 한 번에 하나의 칼럼만 삭제할 수 있으며, 테이블에는 최소한 하나 이상의 칼럼이 남아 있어야 한다. 삭제된 칼럼은 복구가 불가능하므로 주의해야 한다.
ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;
ALTER TABLE PLAYER DROP COLUMN ADDRESS;
-- 결과 확인
DESC PLAYER;
-- 결과
칼럼 NULL 가능 데이터 유형
------------- --------- --------------
PLAYER_ID NOT NULL CHAR(7)
PLAYER_NAME NOT NULL VARCHAR2(20)
TEAM_ID NOT NULL CHAR(3)
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)
ALTER TABLE PLAYER DROP COLUMN ADDRESS;
-- 결과 확인
exec sp_help 'dbo.PLAYER';
-- 결과
칼럼이름 데이터 유형 길이 NULL 가능
------------ ----------- ---- ---------
PLAYER_ID CHAR(7) 7 NO
PLAYER_NAME VARCHAR(20) 20 NO
TEAM_ID CHAR(3) 3 NO
E_PLAYER_NAME VARCHAR(40) 40 YES
NICKNAME VARCHAR(30) 30 YES
JOIN_YYYY CHAR(4) 4 YES
POSITION VARCHAR(10) 10 YES
BACK_NO TINYINT 1 YES
NATION VARCHAR(20) 20 YES
BIRTH_DATE DATE 3 YES
SOLAR CHAR(1) 1 YES
HEIGHT SMALLINT 2 YES
WEIGHT SMALLINT 2 YES
기존 테이블의 칼럼 데이터 유형, 디폴트 값, NOT NULL 제약조건 등을 변경할 수 있다. 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못하며, NULL 값을 가지고 있는 경우에만 크기를 줄일 수 있다. 칼럼의 데이터 유형 변경도 NULL 값을 가진 경우에만 가능하다. DEFAULT 값을 변경하면 이후 삽입되는 행에만 영향을 미친다.
-- Oracle
ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 …);
-- SQL Server
ALTER TABLE 테이블명 ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 …);
ALTER TABLE TEAM_TEMP MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
-- 결과 확인
DESC TEAM_TEMP;
-- 결과
칼럼 NULL 가능 데이터 유형
------------- --------- --------------
TEAM_ID NOT NULL CHAR(3)
REGION_NAME NOT NULL VARCHAR2(8)
TEAM_NAME NOT NULL VARCHAR2(40)
E_TEAM_NAME VARCHAR2(50)
ORIG_YYYY NOT NULL VARCHAR2(8) -- 기본값 '20020129'
STADIUM_ID NOT NULL CHAR(3)
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)
ALTER TABLE TEAM_TEMP ALTER COLUMN ORIG_YYYY VARCHAR(8) NOT NULL;
-- 추가로 DEFAULT값 설정
ALTER TABLE TEAM_TEMP ADD CONSTRAINT DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY;
-- 결과 확인
exec sp_help 'dbo.TEAM_TEMP';
-- 결과
칼럼이름 데이터 유형 길이 NULL 가능
------------ ----------- ---- ---------
TEAM_ID CHAR(3) 3 NO
REGION_NAME VARCHAR(8) 8 NO
TEAM_NAME VARCHAR(40) 40 NO
E_TEAM_NAME VARCHAR(50) 50 YES
ORIG_YYYY VARCHAR(8) 8 NO -- 기본값 '20020129'
STADIUM_ID CHAR(3) 3 NO
ZIP_CODE1 CHAR(3) 3 YES
ZIP_CODE2 CHAR(3) 3 YES
ADDRESS VARCHAR(80) 80 YES
DDD VARCHAR(3) 3 YES
TEL VARCHAR(10) 10 YES
FAX VARCHAR(10) 10 YES
HOMEPAGE VARCHAR(50) 50 YES
OWNER VARCHAR(10) 10 YES
칼럼명을 변경해야 할 때 사용하는 명령어다. 이 명령어는 일부 DBMS에서만 지원된다. Oracle에서는 ALTER TABLE RENAME COLUMN 문을 사용하고, SQL Server에서는 sp_rename 저장 프로시저를 사용한다.
-- Oracle
ALTER TABLE 테이블명 RENAME COLUMN 기존칼럼명 TO 새로운칼럼명;
-- SQL Server
sp_rename 'dbo.테이블명.기존칼럼명', '새로운칼럼명', 'COLUMN';
PLAYER 테이블에서 PLAYER_ID를 TEMP_ID로, 다시 PLAYER_ID로 변경
ALTER TABLE PLAYER RENAME COLUMN PLAYER_ID TO TEMP_ID;
ALTER TABLE PLAYER RENAME COLUMN TEMP_ID TO PLAYER_ID;
sp_rename 'dbo.PLAYER.PLAYER_ID', 'TEMP_ID', 'COLUMN';
sp_rename 'dbo.PLAYER.TEMP_ID', 'PLAYER_ID', 'COLUMN';
이와 같은 방법으로 테이블의 칼럼을 추가, 삭제, 수정 및 이름 변경할 수 있다. 각 명령을 사용할 때는 데이터 무결성과 기존 데이터를 고려하여 신중히 수행해야 한다.
DROP CONSTRAINT는 테이블 생성 시 설정된 제약조건을 삭제할 때 사용하는 명령어이다. 제약조건을 삭제하면, 그 제약조건에 의해 보호되던 데이터 무결성 조건이 해제된다.
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
아래는 PLAYER 테이블의 외래키 제약조건을 삭제하는 예제이다.
ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK;
ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK;
ADD CONSTRAINT는 테이블 생성 후에도 필요에 따라 제약조건을 추가할 수 있게 한다. 특정 칼럼에 제약조건을 추가하여 데이터 무결성을 강화할 수 있다.
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
아래는 PLAYER 테이블에 외래키 제약조건을 추가하는 예제이다.
ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
외래키 제약조건을 추가하면, 참조 무결성 옵션에 따라 부모 테이블이나 부모 테이블의 데이터를 삭제하려고 할 때 제약조건이 작동하여 삭제를 막는다.
DROP TABLE TEAM;
-- 결과: ERROR: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있다. ※ 테이블은 삭제되지 않음
DROP TABLE TEAM;
-- 결과: ERROR: 엔터티 ‘TEAM’은 FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다. ※ 테이블은 삭제되지 않음
DELETE FROM TEAM WHERE TEAM_ID = 'K10';
-- ERROR: 무결성 제약조건(SCOTT.PLAYER_FK)이 위배되었다. 자식 레코드가 발견되었다. ※ 데이터는 삭제되지 않음
DELETE FROM TEAM WHERE TEAM_ID = 'K10';
-- 결과: ERROR: FOREIGN KEY 제약 조건을 참조하므로 삭제할 수 없다. ※ 데이터는 삭제되지 않음
RENAME 명령어를 사용하면 테이블의 이름을 변경할 수 있다. 이는 테이블 구조나 데이터에는 영향을 미치지 않고, 단지 테이블의 이름만 변경한다.
RENAME 변경전 테이블명 TO 변경후 테이블명;
SQL Server에서는 sp_rename 저장 프로시저를 사용하여 테이블 이름을 변경한다.
sp_rename '변경전 테이블명', '변경후 테이블명';
아래는 TEAM 테이블명을 TEAM_BACKUP으로 변경하고 다시 TEAM으로 변경하는 예제이다.
RENAME TEAM TO TEAM_BACKUP;
-- 결과: 테이블 이름이 변경되었다.
RENAME TEAM_BACKUP TO TEAM;
-- 결과: 테이블 이름이 변경되었다.
sp_rename 'dbo.TEAM', 'TEAM_BACKUP';
-- 주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다.
sp_rename 'dbo.TEAM_BACKUP', 'TEAM';
-- 주의: 엔터티 이름 부분을 변경하면 스크립트 및 저장 프로시저를 손상시킬 수 있다.
이와 같이 ALTER TABLE과 RENAME 명령을 사용하면 데이터베이스 테이블의 구조를 유연하게 변경하고 관리할 수 있습니다. 그러나 이러한 작업을 수행할 때는 데이터 무결성을 유지하고, 변경으로 인한 영향을 최소화하기 위해 신중히 계획하고 실행해야 합니다.
DROP TABLE 명령은 테이블을 완전히 삭제할 때 사용된다. 이 명령은 테이블의 데이터와 구조를 모두 제거한다. CASCADE CONSTRAINT 옵션을 사용하면 해당 테이블과 관계가 있는 참조 제약조건들도 함께 삭제한다.
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
SQL Server에서는 CASCADE CONSTRAINT 옵션이 없으므로, 테이블을 삭제하기 전에 참조하는 FOREIGN KEY 제약조건을 수동으로 삭제해야 한다.
아래는 PLAYER 테이블을 삭제하는 예제이다.
DROP TABLE PLAYER;
-- 결과 확인
DESC PLAYER;
-- 결과
-- ERROR: 설명할 객체를 찾을 수 없다.
DROP TABLE PLAYER;
-- 결과 확인
exec sp_help 'dbo.PLAYER';
-- 결과
-- 메시지 15009, 수준 16, 상태 1, 프로시저 sp_help, 줄 66 데이터베이스 ‘northwind'에 엔터티 'dbo.player'이(가) 없거나 이 작업에 적합하지 않다.
TRUNCATE TABLE 명령은 테이블의 데이터만 모두 삭제하고, 테이블 구조는 유지한다. 이 명령을 사용하면 테이블의 모든 행이 제거되고, 저장 공간이 재사용 가능하다. TRUNCATE TABLE은 데이터 구조 변경 없이 데이터를 일괄 삭제하므로 성능 면에서 효율적이다. 다만, 정상적인 복구가 불가능하므로 주의가 필요하다.
TRUNCATE TABLE 테이블명;
아래는 TEAM 테이블의 모든 행을 삭제하는 예제이다.
TRUNCATE TABLE TEAM;
-- 결과 확인
DESC TEAM;
-- 결과
칼럼 NULL 가능 데이터 유형
------------- --------- --------------
TEAM_ID NOT NULL CHAR(3)
REGION_NAME NOT NULL VARCHAR2(8)
TEAM_NAME NOT NULL VARCHAR2(40)
E_TEAM_NAME VARCHAR2(50)
ORIG_YYYY CHAR(4)
STADIUM_ID NOT NULL CHAR(3)
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)
TRUNCATE TABLE TEAM;
-- 결과 확인
exec sp_help 'dbo.TEAM';
-- 결과
칼럼이름 데이터 유형 길이 NULL 가능
------------ ----------- ---- ---------
TEAM_ID CHAR(3) 3 NO
REGION_NAME VARCHAR(8) 8 NO
TEAM_NAME VARCHAR(40) 40 NO
E_TEAM_NAME VARCHAR(50) 50 YES
ORIG_YYYY CHAR(4) 4 YES
STADIUM_ID CHAR(3) 3 NO
ZIP_CODE1 CHAR(3) 3 YES
ZIP_CODE2 CHAR(3) 3 YES
ADDRESS VARCHAR(80) 80 YES
DDD VARCHAR(3) 3 YES
TEL VARCHAR(10) 10 YES
FAX VARCHAR(10) 10 YES
HOMEPAGE VARCHAR(50) 50 YES
OWNER VARCHAR(10) 10 YES
테이블의 데이터를 삭제할 때 시스템 부하를 고려한다면 TRUNCATE TABLE을 사용하는 것이 좋다. 다만, 복구가 불가능하므로 주의해서 사용해야 한다.