https://orange-makiyato.tistory.com/100
바로 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
'DB' 카테고리의 다른 글
[DB] 스키마가 뭔데? (0) | 2024.02.14 |
---|---|
[postgreSQL] row_number(), rank(), dense_rank(), partition by (0) | 2024.01.17 |
[postgreSQL] 포스트그레스 설치하기(windows) (0) | 2024.01.08 |
도커를 이용한 mongDB 설치하기 (0) | 2023.09.21 |
[DB] 서버와 DB가 Connection을 구성하는 방법 (0) | 2023.05.10 |
댓글