본문 바로가기
DB

[postgreSQL] 포스트그레스 기본 명령어 실습해보기

by 오렌지마끼야또 2024. 1. 9.
728x90
반응형

 

 

 

 

 

https://orange-makiyato.tistory.com/100

 

[postgreSQL] 포스트그레스 설치하기(windows)

https://www.postgresql.org/ PostgreSQL The world's most advanced open source database. www.postgresql.org Download 클릭 windows 클릭 Download the installer 클릭 최신버전 windows x86-64 다운로드 설치파일 실행 next 설치 directory 확인

orange-makiyato.tistory.com

 

 

 

바로 DBeaver(GUI 툴) 를 써도 되지만 CLI의 맛?을 보는것도 좋을 것 같아 psql로 진행했습니다.

 

 

------------------------------------------------------

 

 

psql을 실행합니다.

 

 

DB 목록 보기

\l (백슬레시 + 영어 엘)

설치 직 후 기본적으로 3개의 DB가 있군요.

 

현재 기본적으로 postgres DB를 사용하는 postgres 라는 슈퍼유저로 연결된 상태입니다.

 

 

 

 

테이블 생성하기

 

명령어는 한줄로 쭉 써도 됩니다. 저처럼 엔터치면서 하는방법의 단점은 오타나면 처음부터 다시 쳐야한다는거.. (숙달될겸 오히려 좋아?)

create table mytable(
id integer primary key,
name varchar(10) unique not null,
email varchar(30)
);

 

 

 

 

생성된 테이블 확인하기

\dt

스키마를 따로 생성하지 않으면 public 스키마에 만들어집니다.

 

 

 

 

스키마 생성하기

create schema myschema;

 

 

 

 

현재 존재하는 스키마 확인하기

\dn

 

 

 

 

 

스키마에 테이블 만들기

crate table myschema.mytable(
id integer primary key,
name varchar(10) unique not null,
email varchar(30)
);

 

 

 

 

스키마에 생성된 테이블 확인하기

\dt myschema.*

 

 

 

 

모든 스키마에 대한 모든 테이블 확인하기

\dt *.*

myschema 스키마의 mytable, public 스키마의 mytable를 포함해서 설치되면서 기본적으로 생성된 스키마와 테이블까지 모두 보입니다.

 

 

 

 

 

데이터 넣기

insert into myschema.mytable (id, name, email)
values (11111, '홍길동', 'aaa@naver.com');

insert into myschema.mytable (id, name)
values (22222, '이성계');

여러개를 한번에 insert 하려고 했지만 아래처럼은 불가능하고 컴럼에 맞게만 여러개가 가능합니다.

insert into myschema.mytable (id, name, email)
values (11111, '홍길동', 'aaa@naver.com'),
       (22222, '이성계');
오류:  VALUES 목록은 모두 같은 길이여야 함
줄 3: (22222, '이성계');

 

 

 

 

 

테이블 보기

select * from myschema.mytable;

insert 시에 아무것도 넣지 않으면 빈 문자열 '' 이 아니라 null이 됩니다.

 

 

 

테이블 수정하기(컬럼 추가)

alter table myschema.mytable
add column city varchar(10);

 

 

 

 

 

데이터 수정하기

update myschema.mytable
set city = '서울'
where id = 11111;

update myschema.mytable
set city = '부산'
where id = 22222;

한번에 수정하기

update myschema.mytable
set city = 
	case
    	when id = 11111 then '서울'
        when id = 22222 then '부산'
        else null
    end;

 

 

 

 

 

삭제 관련 명령어 delete, truncate, drop

 

 

 

 

특정 데이터 지우기

delete from myschema.mytable
where id = 22222;

 - WHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거하는 방식
 - WHERE절을 사용하지않고 테이블의 모든 데이터를 삭제하더라도, 내부적으로는 한줄 한줄 일일히 제거하는 과정을 거칩니다.
 - 처리속도가 늦고, 퍼포먼스에 좋지않은 영향을 줄 수 있습니다.
 - 원하는 데이터만 골라서 삭제할 때에는 DELETE 사용 / 전체 데이터 삭제할 때에는 TRUNCATE 사용합니다.
 - 데이터를 삭제하더라도 데이터가 담겨있던 공간은 남아있습니다.
- DELETE된 데이터는 COMMIT 명령어를 사용하기 전이라면, ROLLBACK 명령어를 통해 되돌릴 수 있습니다.

 

 

 

 

데이터 모두 지우기

truncate table myschema.mytable;

 - 전체 데이터를 한번에 삭제하는 방식 ( <-> DELETE)
 - 최초 생성되었을 당시의 공간만 남기고, 데이터가 남겨있던 공간은 없어집니다.
 - TRUNCATE TABLE을 하면 CREATE TABLE을 한 직후의 상태와 같습니다.
 - 자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없습니다.

 

 

 

 

 

테이블 지우기

drop table myschema.mytable;

 - 테이블 자체를 완전히 날려버리는 방식입니다. (처음부터 없었던 테이블처럼)
 - 테이블 자체가 모두 지워지며, 해당 테이블에 생성되어있던 모든 인덱스도 사라집니다.
 - 자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없습니다.
 - 오라클에서(오라클10g부터)는 테이블이 삭제되는 것이 아니라 윈도우의 휴지통 개념처럼 잠시 삭제 -> 테이블 이름이 BIN$..로 변경됩니다.

 

 

 

 - DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어 들지 않습니다. 원하는 데이터만 지울 수 있습니다. 삭제 후 잘못 삭제한 것을 되돌릴 수 있습니다.
 - TRUNCATE 명령어는 용량이 줄어 들고, 인덱스 등도 모두 삭제 됩니다. 테이블은 삭제하지는 않고, 데이터만 삭제한다. 한꺼번에 다 지워야 합니다. 삭제 후 절대 되돌릴 수 없습니다.
 - DROP 명령어는 데이블 전체를 삭제, 공간, 객체를 삭제합니다. 삭제 후 절대 되돌릴 수 없습니다.

 

 

 

 

 

 

 

참고

 

https://chiefcoder.tistory.com/58

 

 

 

728x90
반응형

댓글