책 읽다가 코딩하다 죽을래

개발자 취업 필수 개념 3주차 개발일지(SQL) 본문

GD프로젝트/개발일지

개발자 취업 필수 개념 3주차 개발일지(SQL)

ABlue 2021. 8. 28. 14:48

개발자 취업 필수 개념 3주 차에는 데이터베이스와 SQL을 배웠다.

 

목차

1. DataBase

1.1 SQL, NoSQL

2. Table의 구조

3. DDL

4. DML

5. 트랜잭션의 속성

 

 


1. DataBase


더보기
논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다.

-📚 두산백과(데이터베이스의 정의)

그러면 excel도 데이터베이스라고 할 수 있나요? 

 

 

정말 아니다 라고 할 수는 없지만

 

 

 

excel은 데이터들이 정형화되어 있지 않은 상태도 허용된다는 점에서

데이터베이스와의 차이점이 있습니다.

 

정형화되어 있지 않다는 것은 데이터의 형식이 불규칙하다는 의미입니다.

 

데이터베이스는 불규칙한 것을 싫어합니다.

왜냐하면 규칙적이고 정형화된 데이터이여야지 빠른 속도를 추구할 수 있기 때문입니다.

 

 

엑셀과 데이터베이스의 차이점

 

 

 

 


1 - 1 SQL, NoSQL


더보기

 

 

데이터베이스에는 크게

관계형 데이터베이스(SQL)비관계형 데이터베이스(NoSQL)로 나뉩니다

 

 


1. SQL


 

(SQL)은 데이터를 구조적으로 묶은 목록을 테이블(Table)이라 부릅니다.

그리고 그 테이블 안에 있는 단일 데이터 항모들을 레코드(Record)라고 합니다.

 

 

 

 

(SQL)의 특징은 다음과 같습니다.

 

1. 명확하게 정의된 구조가 있습니다.

2. 관계를 통해서 연결된 여러 개의 테이블에 데이터가 분산됩니다.

3. 일관성이 항상 유지돼야 한다.

 

 


2. NoSQL


 

(NoSQL)은 Not Only SQL의 약자로써 SQL이 아닌 것들이다.

(NoSQL)은 데이터를 구조적으로 묶은 목록을 컬렉션(Collection)이라고 합니다.

그리고 그 컬렉션 안에 있는 단일 데이터 항목을 문서(Document)라고 합니다. 

 

 

(NoSQL)의 특징은 다음과 같습니다.

 

1. 정해진 구조가 없어서 다르 형태로 데이터를 쉽게 추가할 수 있습니다

2. 데이터가 관계가 없이 하나에 모두 저장해서 찾기는 편합니다. 그러가 데이터가 변경되어야 한다면 일일이 찾아서 변경해야 하는 번거로움이 존재한다.

3. 수평적으로 확장이 가능하다.

4. 조인 연산이 없으며, 데이터 일관성이 깨지는 구간이 존재한다.

 

 

 

 


2. Table의 구조


더보기

 

 

 

 

용어 설명
튜플(Tuple)/행(Row) 테이블 내의 행을 의미하며 레코드라고도 부른다.
애트리뷰트(Attribute)/열(Column) 테이블 내의 열을 의미
식별자(identifier) 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념이다. 고유 키가 이에 속한다.
카디널리티(Cardinality) 튜플(Tuple)의 개수
차수(Degree) 애트리뷰트(Attribute)의 개수
도메인(Domain) 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합(ex: gender의 도메인은 남자,여자 이다.)

 

 

 


3. DDL


더보기

정의


 

DDL(Data Definition Language) : 데이터를 정의하는 언어이다.

테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령어들로 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 데이터 구조와 관련된 명령어들을 데이터 정의어라고 한다.

 

데이터 정의어에는 다음과 같은 명령어들이 있다.

 

 

구분 DDL 명령어 설명
생성 CREATE 데이터베이스 오브젝트 생성하는 명령어
수정 ALTER 데이터베이스 오브젝트 변경하는 명령어
삭제 DROP 데이터베이스 오브젝트 삭제하는 명령어
TURNCATE 데이터베이스 오브젝트 내용을 삭제하는 명령어

 


TABLE 관련 DDL


 

CARETE TABLE 명령어

CREATE TABLE 테이블명(
    칼럼명 데이터타입 [제약조건],
    칼럼명 데이터타입 [제약조건],
);

 

예시

CREATE TABLE first_grade_class_1(
    id number PRIMARY KEY, AUTO_INCREMENT,
    name VARCHER(30),
    age number NOT NULL,
    gender  NOT NULL
);

 

제약조건은 다음과 같은 것들이 있다.

 

제약조건 설명
PRIMARY KEY 테이블의 기본 키를 정의하며 유일하게 테이블의 각 행을 식별하는 컬럼이다.
FOREIGN KEY REFERENCES (참조테이블(기본키)) 외래 키를 정의, 참조 대상을 테이블(컬럼명)으로 명시해야 한다.
UNIQUE 테이블 내에서 얻은 유일한 값을 갖도록 하는 제약조건
NOT NULL 해당 컬럼은 NULL 값을 포함하지 않도록 하는 제약조건
CHECK 개발자가 정의하는 제약조건이다. 참(TRUE)이어야 하는 조건을 지정한다.
DEFAULT 데이터를 INSERT할 때 해당 컬럼의 값을 넣지 않는 경우 기본값으로 설정해 주는 제약조건

 

ALTER TABLE 명령어

 

ALTER TABLE ADD

ALTER TABLE 테이블명 ADD 칼럼명 데이터타임 [제약조건];

 

예시

ALTER TABLE first_grade_class_1 ADD phone_number VARCHER(11) UNIQUE;

 

 - first_grade_class_1 테이블의 phone_number라는 칼럼에 대해 타입이 VARCHAR(11)이면서 UNIQUE 제약조건을 걸도록 추가한다.

 


ALTER TABLE MODIFY

ALTER TABLE 테이블명 MODIFY 칼럼명 데이터타임 [제약조건];

 

예시

ALTER TABLE first_grade_class_1 MODIFY id number  PRIMARY KEY, AUTO_INCREMENT, NOT NULL;

 

 - first_grade_class_1 테이블의 id라는 칼럼에 대해 이하의 타입과 제약조건을 걸도록 수정한다.

 

 


ALTER TABLE DROP

ALTER TABLE 테이블명 DROP 칼럼명;

예시

ALTER TABLE first_grade_class_1 DROP gender;

 

- first_grade_class_1 테이블의 gedner라는 칼럼을 삭제한다.

 

 


DROP TABLE 명령어

DROP TABLE 테이블명 [CASCADE | RESTRICT];

예시

DROP TABLE first_grade_class_1

 

 - first_grade_class_1 테이블을 삭제한다.

 

옵션 설명
CASCADE 삭제하는 테이블을 참조하는 테이블까지 연쇄적으로 제거한다.
RESTRICT 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않는다.

 

 


TURNCATE TABLE 명령어

TURNCATE TABLE 테이블명;

예시

TURNCATE TABLE first_grade_class_1

 

- first_grade_class_1 테이블의 모든 레코드를 삭제한다. 테이블을 삭제하는 것이 아니다.

 

 

 


4. DML


더보기

정의


 

DML(Data Manipulation Language) : 데이터를 조작하는 언어이다.

데이터베이스에 저장된 자료들을 입력(Create), 조회(Read), 수정(Update), 삭제(Delete)하는 언어이다. 흔히 CRUD라고 한다.

 

데이터 조작어에는 다음과 같은 명령어들이 있다.

 

 

 

유형 동작 설명
SELECT 조회 테이블 내 컬럼에 저장된 데이터를 조회
INSERT 삽입 테이블 내 칼럼에 데이터를 추가
UPDATE 갱신 테이블 내 칼럼에 저장된 데이터를 수정
DELETE 삭제  테이블 내 칼럼에 저장된 데이터를 삭제

 

 


SELETE 명령어


SELECT 명령어는 기본적으로 조회하고 싶은 속성을 선택하는 SELECT와 조회하고 싶은 테이블을 선택하는 FROM이 있어야 한다.

 

SELECT 속성명1, 속성명2...
FROM 테이블명1, ... ;

예시

SELECT name
FROM first_grade_class_1;

 

 - first_grade_class_1 테이블의 모든 레코드의 name 속성을 조회한다.

명령어가 실행된 결과

 

SELECT 명령어에 조건을 부여해서 조회하는 WHERE 절을 추가할 수 있다.

 

SELECT *
FROM first_grade_class_1
WHERE name = '이순신';
명령어가 실행된 결과

 



INSERT 명령어


명령어는 삽입하고 싶은 테이블을 선택하는 INSERT INTO와 삽입하고 싶은 값을 넣는 VALUES가 있어야 한다.

 

INSERT INTO 테이블명(속성명1, ... )
VALUES(데이터1, ... );

예시

INSERT INTO first_grade_class_1(name, age, gender)
VALUES('은하', 25, '여자')

 

 - first_grade_class_1 테이블의 '은하', 25, '여자' 라는 칼럼을 삽입한다.

 - id는 AUTO_INCREMENT 속성으로 인해 하나 증가된 값이 부여된다.

명령어 실행 결과

 



UPDATE 명령어


UPDATE 명령어는 수정하고 싶은 대상이 있는 테이블을 선택하는 UPDATE와 수정하고 싶은 속성과 값을 넣는 SET, 그리고 수정해야 할 칼럼을 선택하는 WHERE 가 있어야 한다.

 

UPDATE 테이블명
SET 속성명 = 데이터, ...
WHERE 조건;

예시

UPDATE first_grade_class_1
SET age = 27
WHERE name = 'ABlue';

 

 - first_grade_class_1 테이블의 name 이 'ABlue' 라는 칼럼을 찾아 속성 age를 27로 수정한다.

명령어 실행 결과

 



DELETE 명령어


DELETE 명령어는 삭제하고 싶은 대상이 있는 테이블을 선택하는 DELETE와 그리고 삭제해야 할 칼럼을 선택하는 WHERE 가 있어야 한다.

 

DELETE 테이블명
WHERE 조건;

예시

UPDATE first_grade_class_1
WHERE name = '은하';

 

 - first_grade_class_1 테이블의 name 이 '은하' 라는 칼럼을 찾아 삭제한다.

 

명령어 실행 결과

 

 

 

 

 


5. 트랜잭션의 속성


더보기

 

📚 트랜잭션의 정의 : 트랜잭션이란 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위이다.

 

트랙잭션은 다음의 특징을 만족해야 한다.

 

특징 설명 주요기법
원자성(Atomicity) 분해가 불가능한 최소단위이다.
연산 전체가 성공 또는 실패해야한다.(All or Nothing)
하나라도 실패할 경우 전체가 취소되야한다.
- Commit/Rollback
- 회복성 보장
일관성(Consistency) 트랜잭션이 실행이 성공되면 항상 일관된 데이터베이스 상태를 보존해야한다. - 무결성 제약조건
- 동시성 제어
격리성(Isolation) 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 읽기 및 쓰기 가 불가능한 특성이다. - Read Uncommited
- Read Commited
- Repeatable Read
- Serializable
영속성(Durability) 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장하는 특성이다. - 회복기법

 

이 4가지가 모두 지켜져야

 

 

 

온라인 거래상에서 골드와 물건이 서로 교환하거나 혹은 서로 교환이 실패하거나(All or Nothing)

 

 

 

고객 이름이 없는 계약은 받지 않게 되며 (일관성)

 

 

 

 수많은 트랜잭션이라 해도 하나씩 처리해서 데이터의 손실이 없게 하며(고립성)

 

 

 

 

서버가 터져도 데이터베이스 안에 데이터는 복구할 수 있다(영속성)