Notice
Recent Posts
Recent Comments
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Link
관리 메뉴

개발블로그

DB - 데이터 본문

DB

DB - 데이터

춘식스 2022. 1. 19. 09:43

데이터 삽입하는 방법

INSERT INTO develop_book
VALUES
(1, '2019-12-17', 'mongoDB');
  • develop_book = 테이블명
  • 1 = book_id
  • '2019-12-17' = date
  • 'mongoDB' = name

psql 데이터 삽입하는 방법

INSERT 0 1이 노출된다

0 = oid (더 이상 지원하지 않는다)

1 = 내가 넣은 갯수, count

데이터 수정하는 방법

UPDATE 테이블명
	SET 칼럼명 = 바꿀 데이터 내용
	WHERE 수정할 로우의 조건
UPDATE develop_book
	SET name = 'Java'
	WHERE book_id = 2
RETURNING *;
  • RETURNING *; = 수정한 내용을 바로 조회
  • 데이터를 바꾸면 밑으로 이동하게 된다

데이터 수정 예시

DELETE FROM 테이블명 WHERE 칼럼명 = 삭제할 데이터의 칼럼 값;
DELETE FROM develop_book WHERE book_id = 10;
  • postgreSQL 조회시 데이터의 순서를 조회하지않는다.

데이터 삭제 예시


칼럼명 순서

  • 칼럼명에 들어가야하는데 순서가 헷갈릴때 적는 방법
INSERT INTO develop_book (book_id, date, name)
VALUES(3, '2020-01-03', 'HTML/CSS');
  • 순서를 바꿔서 넣는 방법
INSERT INTO develop_book (date, book_id, name)
VALUES ('2019-01-03', '4', 'ABC');
  • 한번에 여러개를 적는 방법
INSERT INTO develop_book VALUES
(book_id, date, name),
(book_id, date, name),
(book_id, date, name);

데이터 타입

숫자형

INTEGER

  • 나타낼수 있는 수의 범위와 저장용량 사이의 밸런스가 적절하다.
  • 많이 사용한다.
  • 숫자 길이 제한이 불가하다.

NUMERIC(p, q)

  • 소수점 자릿수이다.
  • 100까지만 할수있다.
    • p = 전체 자릿수
    • q = 소수점 자릿수

FLOAT

  • 부동소수점을 사용한다.
  • REAL or DOUBLE PRECISION으로 인식한다.
  • 내가 생각한 연산과 다른 결과값이 나올 수 있다.
  • FLOAT를 나중에 사용한다.
  • IEEE754 = 반올림

SERIAL

  • INTEGER 기본값으로 1씩 추가되며 값이 자동생성된다.

 

문자형

VARCHAR(n)

  • n은 굳이 안적어줘도된다.

CHAR(n)

  • 오후 4:43 2021-12-01

TEXT

 

 

날짜 및 시간형

TIMESTAMP

  • 현재 있는 나라에 시간이 나온다.
  • 시차가 적용되지 않는다.

TIMESTAMPTZ

  • 날짜 + 시간이 나온다.
  • 세계 표준 시간이 나온다.
  • (GMT +09) = 시차

DATE

  • 날짜만 나타난다.

TIME

  • 시간만 나타난다.

TIME WITH TIME ZONE

  • 시간정보만 표시된다.
  • 세계표준시 + 시간대 정보 반영된다.
CREATE TABLE datetime_stydy (
	type_ts TIMESTAMP,
	type_tstz TIMESTAMPTZ,
	type_date DATE,
	type_time TIME
);

INSERT INTO datetime_study
(type_ts, type_tstz, type_date, type_time)
VALUES (
	'2020-07-06 20:00:25+09',
	'2020-07-06 20:00:25+09',
	'2020-07-06',
	'18:00:00'
);
  • SHOW TIMEZONE; = timezone을 확인할수 있다.
  • SET TIMEZONE = 'America/Los_Angeles';
    • 서울 -> 로스엔젤레스
    • 각국에 시간을 해야한다면 timezone말고, UTC를 사용한다.

time zone 반영 예시

 

불리언형

TRUE

  • 참이다
  • True, yes, on, 1

FALSE

  • 거짓이다.
  • False, no, off, 0

NULL

  • 알 수 없는 정보 또는 일부 불확실
  • 없는 값으로 취급된다.

 

JSON형

JSON

  • 키와 값에 쌍으로 이루어진 데이터 오브젝트이다.
오브젝트란
객체 또는 오브젝트는 메모리에 할당된 프로그램에서 사용되는 데이터이다.
  • 개방형 표준 포맷
  • 입력한 텍스트의 정확한 사본 저장
  • 입력이 비교적 빠르지만 처리 속도가 느리다.
  • 공백이 인식된다.
  • JSON은 {}안에 있다.
  • JSON[]
  • JSON 구조
{"키값":"벨류값"}
{"키값":"벨류값", "키값":{"키값":"벨류값"}}
INSERT INTO develop_book_order
VALUES
(001, '{"customer":"Jaejin", "books":{"product":"product1", "qty":2}}'),
(002, '{"customer":"Yunsang", "books":{"product":"product2", "qty":3}}'),
(003, '{"customer":"Sojung", "books":{"product":"product3", "qty":1}}');

JSON 사용 예시

JSONB

  • 텍스트를 이진(binary) 형태로 분해 후 저장한다.
  • 입력이 비교적 느리지만 처리속도가 빠르다
  • DB는 입력보단 처리속도를 더 중요시여기기때문에 JSONB를 선호한다.
  • B = blob = 바이널
  • 빠르게하기위해 최적화되어있다.
  • JSON 배열
  • JSONB[]
  • JSONB 구조
{{"키값":"벨류값"}, {"키값":"벨류값"}}

 

CAST 연산자

데이터 타입을 변환해준다.
SELECT CAST ('3000' AS INTEGER);

CAST 연산자 예시

SELECT '3000'::INTEGER;

줄여서 쓰기도 가능하다.

 

데이터 무결성

데이터베이스 내에 정확하고 유효한 데이터만 유지시키고 속성이다.
CRUD 수행시 데이터 값을 일관되고 정확하게 유지하고자 하는것이다.

장점

  • 응용프로그램에서 추가작업을 하지않아도된다.

무결성 제약조건

개체 무결성

모든 테이블이 프라이머리 키(PK)를 가져야하며,
프라이머리 키로 선택된 칼럼은 고유하고 null 값을 허용하지 않는다.
데이터를 구분하는 고유한 정보이다.

참조 무결성

외래 키(FK)값이 빈 값(null)이거나 참조된 테이블의
기본 키값(PK, 유일한 값)과 동일해야한다.
  • 1이 있는데 또 존재하면 안된다.

범위 무결성

사용자가 정의한 도메인 내에서
관계형 데이터 베이스의 모든 열을 정의하도록 규정한다.
사용자 화면에서 제약조건을 거는 경우가 많다.
  • 휴대폰 번호 입력시 숫자만
  • 비밀번호 입력시 특수문자 제외 등등...

NOT NULL

빈값을 허용하지 않는 조건이다.
CREATE TABLE contact_info (
	cont_id NUMERIC(3) NOT NULL,
	name VARCHAR(15) NOT NULL,
	tel INTEGER[] NOT NULL,
	Email VARCHAR
);
  • [] = INTEGER 배열정리 (잘 사용하지 않는다)
INSERT INTO contact_info (Email)
VALUES (example@naver.com);
  • 빈자리에 null을 넣으려고 하지만 안되는 사례이다.

UNIQUE

유일한 조건을 가져야 하는 경우 사용한다.
CREATE TABLE contact_info (
	cont_id NUMERIC(3) UNIQUE NOT NULL,
	name VARCHAR(15) NOT NULL,
    tel INTEGER[] NOT NULL,
	Email VARCHAR
);
INSERT INTO contact_info VALUES
(001, 'name' Array[1, 2], 'example@naver.com),
(001, 'name' Array[1, 2], 'example@naver.com),
(001, 'name' Array[1, 2], 'example@naver.com);

PK

PRIMARY KEY
  • 서로 달라야한다 = UNIQUE
  • 빈값을 허용하지 않는다 = NOT NULL
  • UNIQUE NOT NULL = PRIMARY KEY
CREATE TABLE contact_info(
	cont_id SERAIL PRIMARY KEY,
	name VARCHAR(15) NOT NULL,
	tel INTEGER[] NOT NULL,
	email VARCHAR
);

값이 다르기 때문에 하나만 삭제가능하다.

FK

FOREIGN KEY
  • 외래키이다.
  • 다른 테이블의 고유값을 참조한다.
  • UNIQUE PK
  • 참조제약 조건을 거는것이다.
    • 참조되는 테이블 = 부모테이블
    • 참조하는 테이블 = 자식테이블
  • 부모테이블
    • 부모 테이블이 자식 테이블보다 먼저 생성되어야한다.
    • 부모 테이블은 자식 테이블과 같은 데이터값이어야한다.
    • 부모 테이블은 PK, UNIQUE가 있어야한다.
CREATE TABLE subject (
	subj_id NUMRIC(5) UNIQUE NOT NULL,
	subj_name VARCHAR(20) NOT NULL,
	subj_count NUMERIC(20) NOT NULL,
    UNIQUE (subj_id, subj_name)
);
  • 자식테이블
CREATE TABLE teacher (
	teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
	teac_name VARCHAR(20) NOT NULL,
	subj_id NUMERIC(5) NOT NULL,
	subj_name VARCHAR(20) NOT NULL,
	teac_certifi_date DATE NOT NULL,
	FOREIGN KEY (subj_jd, subj_name),
	REFERENCES subject (subj_id, subj_name)
);
  • FOREIGN KEY (subj_id, subj_name) = 참조를 할것
    • (subj_id, subj_name) = 현재 테이블의 칼럼명
  • REFERENCES subject (subj_id, subj_name) = 참조할것
    • subject = 참조대상 테이블명
    • (subj_id, subj_name) = 부모 테이블의 칼럼명

참조테이블 삭제

테이블이 삭제되는 것을 ON DELETE 라고한다.
부모 테이블은 자식 테이블보다 먼저 삭제되면 안된다.

ON DELETE 5가지 유형

  • 지우면 안되는 경우
    • ON DELETE NO ACTION
    • ON DELETE RESTRICT
  • 지워야하는 경우
    • ON DELETE SET NULL
    • ON DELETE CASCADE
    • ON DELETE SET DEFAULT

CHECK

CHECK 명령어 뒤에 나오는 식이 불리언 타입 True를 만족해야한다.
CREATE TABLE order_info (
	order_no INTEGER NOT NULL PRIMARY KEY,
	cust_name VARCHAR(100),
	order_qty INTEGER CHECK,
	(order_qty > 0)
);

 

'DB' 카테고리의 다른 글

DB - 연산자, 함수  (0) 2022.02.04
DB - DATABASE  (0) 2022.01.18
DB - Table  (0) 2022.01.18
PostgreSQL  (0) 2022.01.18
데이터베이스  (0) 2022.01.18
Comments