[PostgreSQL] Postgresql 강좌 - 6. 테이블 관리 (생성,변경, 삭제)
PostgreSQL을 배운지 일주일 정도 지났습니다. 어느정도 해보니 재밌고 할만하네용 ㅎㅎㅎ
그럼 이번 시간에 배울 내용은 테이블 관리에 대해 알아보도록 하겠습니다.
테이블 생성
테이블을 생성하기 위해서는 CREATE TABLE table_name을 이용해 테이블을 생성할 수 있습니다.
테이블을 생성할 때는 명령어를 실행하는 USER가 테이블의 소유자가 됩니다.
테이블 생성에 대한 Syntax
CREATE TABLE table_name ( [
column_name1 data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
column_name2 data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
column_name3 data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
…
] )
테이블에 추가될 컬럼 이름을 column_name에 넣고 컬럼의 데이터 타입을 data_type 부분에 넣습니다.
그리고 column_constraint에 생성한 커럼의 제약 조건을 넣어줍니다.
다음은 테이블 생성에 대한 몇 가지 예지입니다
Create table 명령어로 departments 테이블을 생성하고 department_id와 name컬럼을 생성해줍니다.
Department_id의 데이터 타입은 integer이고 이 테이블의 DefaultKey(기본키)가 됩니다.
Name의 데이터 타입은 varchar(50)입니다.
CREATE TABLE departments(
Department_id integer PRIMARY KEY,
Name varchar(50)
);
아래 예제에는 CREATE TABLE로 flims테이블을 생성합니다.
테이블의 컬럼으로 code, title, did, date_prod,kind,len 등이 있고
films 테이블에서는 제약 조건으로 code 컬럼에서는 NULL값을 갖지 않는
NOT NULL조건과 production 테이블에서 data_prod 컬럼이
중복 없이 유일한 UNIQUE 조건을 만족해야 합니다.
CREATE TABLE films (
code char(5) NOT NULL,
title varchar(40),
did integer,
date_prod date,
kind varchar(10),
len interval hour to minute,
CONSTRAINT production UNIQUE(date_prod)
);
테이블 변경
테이블을 변경하는 것은 ALTER TABLE table_name을 이용해 테이블을 변경할 수 있습니다.
ALTER TABLE table_name
[ADD|DROP|ALTER|SET|RENAME]
column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ];
[ADD|DROP|ALTER|SET|RENAME] 은 테이블을 수정할 때 변경할 내용을 선택합니다.
컬럼을 추가할때는 ADD, 삭제시 DROP, 존재하는 컬럼의 데이터를 변경할 때 ALTER,
테이블을 다른 TABLESPACE나 SCHEMA로 이동 시 SET,
테이블, 컬럼 제약조건의 이름을 변경할 시 RENAME을 사용합니다.
테이블에 변경할 컬럼 이름을 column_name에 넣고 컬럼의 데이터 타입을 data_type에 넣습니다.
그리고 column_constraint에 변경할 컬럼의 제약 조건을 넣어줍니다.
다음은 테이블 변경에 대한 몇가지 예제입니다.
departments 테이블에 데이터 타입이 varchar(50)인 address 컬럼을 추가합니다.
ALTER TABLE departments
ADD COLUMN address varchar(50);
departments 테이블에 address 컬럼의 이름을 city로 변경합니다.
ALTER TABLE departments
RENAME COLUMN address TO city;
departments 테이블에서 zipchk 제약조건을 삭제합니다.
ALTER TABLE distributors
DROP CONSTRAINT zipchk;
departments 테이블에서 tablespace를 fasttablespace tablespace로 이동합니다.
ALTER TABLE distributors
SET TABLESPACE fasttablespace;
departments 테이블에서 address 컬럼의 데이터 타입을 varchar(80)으로 변경후
name컬럼의 데이터 타입을 varchar(100)으로 변경합니다.
ALTER TABLE distributors
ALTER COLUMN address TYPE varchar(80),
ALTER COLUMN name TYPE varchar(100);
테이블 삭제
테이블을 삭제하는 것은 DROP TABLE table_name을 이용해 테이블을 삭제할 수 있습니다.
테이블 삭제 Syntax
DROP TABLE [ IF EXISTS ] table_name [, ...] [ CASCADE | RESTRICT ]
테이블을 삭제할 시 테이블을 소유하고 있는 USER나 SUPERUSER만이 테이블을 삭제할 수 있습니다.
테이블 전체를 삭제하는 것이 아닌 테이블 내의 행들만 삭제 할때는 DELETE나 TRUNCATE를 사용합니다.
먼전 삭제할 테이블 이름을 table_name에 넣고 제약조건으로 CASCADE를 사용할 경우
이 테이블과 view나 개체들도 함께 삭제됩니다.
RESTRICT를 사용할 경우 다른 개체가 종속되어 있을 경우 테이블 삭제를 제한합니다.
다음은 FIlms 테이블과 distributors 테이블 삭제 예제입니다.
DROP TABLE films, distributors;
참고 자료