개발블로그
DB - 데이터 본문
데이터 삽입하는 방법
INSERT INTO develop_book
VALUES
(1, '2019-12-17', 'mongoDB');
- develop_book = 테이블명
- 1 = book_id
- '2019-12-17' = date
- 'mongoDB' = name

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 조회시 데이터의 순서를 조회하지않는다.
DELETE FROM 테이블명 WHERE 칼럼명 = 삭제할 데이터의 칼럼 값;DELETE FROM develop_book WHERE book_id = 10;
칼럼명 순서
- 칼럼명에 들어가야하는데 순서가 헷갈릴때 적는 방법
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를 사용한다.

불리언형
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}}');

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

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