CREATE, ALTER, DROP문이 있다.CREATE TABLE 테이블명 (
{[속성명 데이터타입 [NOT NULL],}
[PRIMARY KEY(속성명),]
[UNIQUE(속성명),]
[FOREIGN KEY(속성명) REFERENCES 참조테이블명(참조속성명)
[ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION]
[ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION]
[CONSTRAINT 제약조건명 제약조건]
);
| 데이터 타입 | 표현 형식 |
|---|---|
| 정수(integer) | INT |
| 실수(float) | FLOAT 또는 REL |
| 고정 길이 문자 | CHAR(문자수) |
| 가변 길이 문자 | VARCHAR(문자수) |
| 시간 | TIME |
| 날짜 | DATE |
CHAR vs VARCHAR
- 고정 길이 문자(
CHAR)는 지정된 문자수만큼 기억 공간을 항상 차지한다.- 가변 길이 문자(
VARCHAR)는 지정된 범위 내에서 실제 입력된 자료에 따라 유동적으로 기억공간을 차지한다.- 예를 들어, CHAR(10), VHARCHAR(10)에 각각 “hello” 라는 5개의 문자가 입력된 경우, CHAR(10)은 입력 길이에 관계없이 10개의 기억공간을 고정적으로 사용하지만 VHARCHAR(10)은 최대 10개의 문자열을 저장할 수 있는 기억공간중 문자열 5개를 저장할 공간만 차지하도록 유동적으로 조절한다.
NOT NULL 제약 조건을 설정하는 예시이다. CREATE TABLE 테이블명 (
속성명 데이터_타입 NOT NULL
);
또는
CREATE TABLE 테이블명 (
속성명 데이터타입 CONSTRAINT 제약조건명 NOT NULL
);UNIQUE 제약 조건을 설정하는 예시이다. CREATE TABLE 테이블명 (
속성명 데이터_타입 UNIQUE
);
또는
CREATE TABLE 테이블명 (
속성명 데이터_타입,
UNIQUE(속성명)
);**PRIMARY KEY**)로 지정합니다. 이 제약 조건을 설정하면 해당 속성에는 중복된 값이 없어야 하며, 자동으로 인덱스가 생성된다. 다음은 PRIMARY KEY 제약 조건을 설정하는 예시이다. CREATE TABLE 테이블명 (
속성명 데이터_타입 PRIMARY KEY
);
또는
CREATE TABLE 테이블명 (
속성명 데이터_타입,
PRIMARY KEY(속성명)
);**PRIMARY KEY**)를 참조하게 된다. 다음은 FOREIGN KEY 제약 조건을 설정하는 예시이다. CREATE TABLE 테이블명 (
속성명 데이터타입,
FOREIGN KEY(속성명) REFERENCES 참조_테이블명(참조_속성명)
);CHECK 제약 조건을 설정하는 예시이다. CREATE TABLE 테이블명 (
속성명 데이터타입 CHECK(조건식)
);
또는
CREATE TABLE 테이블명 (
속성명 데이터타입,
CONSTRAINT 제약조건명 CHECK(속성명=범위)
);CREATE SCHEMA 스키마명 AUTHORIZATION 사용자;CREATE DOMAIN 도메인명 데이터타입
[DEFUALT 기본값]
[CONSTRAINT 제약조건명 CHECK(VALUE IN(범위))];CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명[ASC|DESC])
[CLUSTER];UNIQUE: 중복을 허용하지 않도록 인덱스를 생성할 때 사용하며, 생략시 중복이 허용된다.ON 테이블명(속성명): 지정된 테이블의 속성으로 인덱스를 만든다.[ASC|DESC]: 인덱스로 사용될 속성값의 정렬방법을 나타낸다. ASC는 오름차순, DESC는 내림차순을 의미한다.CLUSTER: 인접된 튜플들을 물리적인 그룹으로 묶어서 저장하도록 할 때 사용된다.CREATE VIEW 구문을 통해 생성되고, CREATE OR REPLACE VIEW 구문으로 기존 VIEW가 존재하는 경우 갱신할 수 있다.CREATE VIEW 뷰이름 as
SELECT 속성명1, 속성명2, ... ,
FROM 테이블명
WHERE 조건ALTER TABLE 테이블명 RENAME TO 바꿀테이블명;ALTER TABLE 테이블명 ADD 추가할속성명 데이터타입;ALTER TABLE 테이블명 ALTER COLUMN 속성명 SET DATA TYPE 변경할데이터타입;ALTER TABLE 테이블명 DROP COLUMN 삭제할속성명;ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건;ALTER TABLE 테이블명 ALTER CONSTRAINT 제약조건명 제약조건;ALTER TABLE 테이블명 DROP CONSTRAINT 제거할제약조건;ALTER TABLE 테이블명 ADD INDEX 인덱스명(속성명);ALTER TABLE 테이블 ALTER INDEX 인덱스명 RENAME TO 바꿀인덱스명;ALTER TABLE 테이블명 DROP INDEX 삭제할인덱스명;ALTER VIEW 뷰이름 AS
SELECT 속성명1, 속성명2, ... ,
FROM 테이블명
WHERE 조건;뷰이름은 변경하려는 뷰의 이름을 지정하는 부분이다. AS 키워드를 사용하여 새로운 뷰의 정의를 수행한다. 그리고 SELECT 문을 사용하여 새로운 뷰의 정의를 작성한다. 이때 원하는 테이블과 조건을 사용하여 데이터를 선택하고, 필요한 속성을 지정할 수 있다.ALTER TABLE 테이블명 ADD PRIMARY KEY (속성명);ALTER TABLE 테이블명 ADD FOREIGN KEY (속성명) REFERENCES 참조테이블명DROP TABLE 테이블명 [CASCADE|RESTRICT];
DROP SCHEMA 스키마명 CASECADE|RESTRICT];
DROP DOMAIN 도메인명 [CASECADE|RESTRICT];
DROP INDEX 인덱스명;
DROP VIEW 뷰이름 [CASECADE|RESTRICT];
DROP CONSTRAINT 제약조건명;
DROP vs TRUNCATE
- DROP과 TRUNCATE는 둘 다 데이터베이스에서 테이블을 삭제하는 구문이지만 다음과 같은 차이점이 존재한다.
- 작동 방식:
DROP: DROP 문은 테이블을 완전히 삭제한다. 즉 테이블과 관련된 데이터, 인덱스, 제약 조건 등 모든 객체가 삭제된다.TRUNCATE: TRUNCATE 문은 테이블의 모든 데이터를 삭제한다. 테이블 스키마는 그대로 유지되며, 테이블 자체만 비워진다. 데이터의 물리적인 공간은 반환되지만, 테이블 구조는 그대로 유지된다.- 롤백 가능 여부:
DROP: DROP 문은 테이블을 삭제하므로 롤백할 수 없다. 한 번 실행된 후에는 복구할 수 없으며, 데이터와 구조가 영구적으로 손실된다.TRUNCATE: TRUNCATE 문은 테이블의 데이터를 삭제하지만 테이블 구조는 그대로 유지된다. 트랜잭션을 사용하는 경우 TRUNCATE 문은 롤백이 가능하다. 롤백되면 삭제된 데이터가 복구된다.- 성능:
DROP: DROP 문은 테이블과 관련된 모든 객체를 삭제하기 때문에 작업이 더 많이 소요될 수 있다.TRUNCATE: TRUNCATE 문은 테이블의 데이터를 삭제하고 테이블을 재사용할 수 있도록 공간을 반환하기 때문에 DROP에 비해 더 빠를 수 있다.- 권한:
DROP: DROP 문은 테이블을 삭제하기 위해 필요한 권한을 요구한다. 테이블의 구조를 변경하는 작업이므로 더 높은 수준의 권한이 필요하다.TRUNCATE: TRUNCATE 문은 테이블의 데이터를 삭제하는 작업이기 때문에 DROP에 비해 상대적으로 낮은 수준의 권한이 필요하다.
→ DROP 문은 테이블 자체와 모든 관련 객체를 삭제하는 반면 TRUNCATE 문은 테이블의 데이터를 삭제하고 테이블을 재사용할 수 있도록 공간을 반환한다. 롤백 가능 여부와 성능 측면에서도 차이가 있기 때문에 적절한 상황에 맞게 선택해야 한다.