SQLite | 테이블 (Table) | 테이블명 변경과 컬럼 추가 및 삭제
이미 생성된 테이블명을 변경하는 방법, 그리고 테이블에 컬럼을 추가하는 방법 대해 설명한다.
테이블명 변경하기
이미 생성된 테이블명을 변경하려면 ALTER TABLE 문을 사용한다. 형식은 다음과 같다.
ALTER TABLE 테이블명 RENAME TO 새 테이블명;
예를 들어, table_old 테이블명을 table_new으로 변경하려면 다음과 같이 실행한다.
alter table table_old rename to table_new;
그럼 실제로 테이블명을 변경해 보자. SQLite 명령인 .tables로 현재 생성되어 있는 테이블 목록을 확인해 보면 customer와 customer2가 생성되는 것을 볼 수 있다.
sqlite> .table
customer customer2
sqlite>
customer2 테이블의 이름을 user에 변경하려고 한다.
alter table customer2 rename to user;
sqlite>
sqlite> alter table customer2 rename to user;
sqlite>
다시 .tables 명령을 실행해 보면 생성 된 테이블 목록이 customer와 user되어 있는 것을 확인할 수 있다.
sqlite> .table
customer user
sqlite>
컬럼 추가하기
이미 생성한 테이블에 컬럼을 추가하려면 ALTER TABLE 문을 사용한다. 형식은 다음과 같다.
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 [데이터 타입];
현재 버전에서는 컬럼을 추가 할 수는 있지만 삭제할 수는 없다.
추가된 컬럼은 테이블의 마지막에 추가된다. 또한 컬럼을 추가하려면 다음 조건을 충족해야 한다.
- PRIMARY KEY 또는 UNIQUE 제약 조건을 설정할 수 없다.
- DEFAULT 제약 조건을 설정할 때는 CURRENT_TIME / CURRENT_DATE / CURRENT_TIMESTAMP는 지정할 수 없다.
- NOT NULL 제약 조건을 설정할 때는 NULL이 아닌 기본값 설정이 필요하다.
예를 들어 mytable 테이블에 new_column 컴럼을 추가하려면 다음과 같이 실행한다.
alter table mytable add column new_column;
그럼 실제로 컴럼을 추가해 보자. 기존 user 테이블에 address 컬럼을 추가한다. 데이터 타입은 TEXT 형태이다. 먼저 .schema 명령을 사용하여 현재 테이블의 스키마를 확인한다.
.schema user
sqlite> .schema user
CREATE TABLE IF NOT EXISTS "user" (id integer, name text);
sqlite>
user 테이블에 address 컬럼을 추가한다.
alter table user add column address text;
sqlite>
sqlite> alter table user add column address text;
sqlite>
다시 .schema 명령을 실행해 보면 address 컬럼이 추가 된 것을 확인할 수 있다.
.schema user
sqlite> .schema user
CREATE TABLE IF NOT EXISTS "user" (id integer, name text, address text);
sqlite>
컬럼 삭제하기
이미 생성한 테이블에 컬럼을 삭제을 즉 DROP COLUMN 문을 SQLite에서는 지원하지 않는다. 대신에 공식 사이트에서는 DROP TABLE, ALTER TABLE RENAME 문을 이용하라고 가이드 하고 있다.
아예 테이블 자체를 새로 만들어서 데이터를 옮겨 넣으라는 뜻이다. 귀찮은 작업이긴 하지만 지금으로서는 따로 방법이 없다.
그럼 실제로 해보도록 하겠다. 먼저 .schema 명령을 사용하여 현재 user 테이블의 스키마를 확인한다.
sqlite> .schema user
CREATE TABLE IF NOT EXISTS "user" (id integer, name text, address text);
sqlite>
새로 user2 테이블을 생성한다. 기존에 user 테이블의 데이터를 새로운 user2 테이블에 넣는다.
sqlite> create table user2 (id integer, name text);
sqlite>
sqlite> insert into user2 (id, name) select id, name from user;
기존 user 테이블을 삭제하고, 새로운 user2 테이블의 테이블명을 기존 user 테이블명으로 변경한다.
sqlite> drop table user;
sqlite>
sqlite> alter table user2 rename to user;
다시 .schema 명령을 실행해 보면 address 컬럼이 없는 것을 확인할 수 있다.
sqlite> .schema user
CREATE TABLE IF NOT EXISTS "user" (id integer, name text);