TIL

내일배움캠프 4주차 금요일 TIL

news0516 2024. 11. 22. 19:30

이전에 사용했던 MongoDB는 비관계형 데이터베이스(NoSQL)
MySQL이 바로 관계형 데이터베이스(RDB)

NoSQL - 데이터 형식이 자유롭다
저장(Write)읽기(Read) 작업이 더욱 빠르며, 복잡한 비즈니스 로직 없이 주로 데이터 읽기와 쓰기에 중점을 둔 서버에서 주로 사용

RDB - 열, 행에 데이터를 가진 테이블이 존재
욱 복잡한 비즈니스 로직과 정형화된 데이터를 체계적으로 관리할 수 있어 더욱 안전한 서버 환경을 구성하기에 좋다
보안이 중요한 기관이나, 은행과 같은 안전성을 중시하는 회사

MYSQL - 가장 널리 사용되는 오픈소스 관계형 데이터베이스(RDB)
데이터베이스를 관리하는 가장 대표적인 언어인 SQL(Structured Query Language)을 사용하여 데이터를 조작하고 관리

데이터베이스에서 사용되는 생성, 삽입, 조회 명령문을 SQL에서 작동시킨디

SQL의 종류
- DDL (Data Definition Language)
- DML (Data Manipulation Language)
- DCL (Data Control Language)
- TCL (Transaction Control Language)
등등... 나중에 참고해보자

기본적인 sql 세팅 후, 테이블 생성 > 데이터 삽입 > 조회 순으로 실습을 진행해보았다.
VSCODE 좌측 하단 Node.js 우클릭
> New query 클릭 시 작성창 뜸
> 작성창에 해당 코드  작성 후 우클릭 > 쿼리 실행

// 테이블 생성
CREATE TABLE IF NOT EXISTS users (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(255) NOT NULL,
    age int(11) NOT NULL,
    PRIMARY KEY (id)
);

 

위에서 참고한 명령문들이 쓰여진듯 하다.


> 데이터 삽입

INSERT INTO users (name, age) VALUES
    ('홍길동', 21);

테이블 이름 (열1, 열2 ...) 같은 구조로 작성 후 다음줄에 작성한 데이터가 insert를 통해 테이블에 삽입되는 듯 하다.


> 데이터 조회

SELECT * 
FROM users;

사전캠프때 배웠던 sql이 여기서 조회할때 사용되는 듯 하다. 그나마 익숙하기는 하지만 이전 학습을 더 찾아볼 필요는 있을 것 같다.


SQL의 제약조건?
컬럼들간의 제한사항을 관리하고, 조건을 위반하는 데이터를 방지하여 데이터베이스의 무결성(Integrity)을 보장하는 규칙

설정할 수 있는 제약 조건의 종류

- 고유(Unique) 제약 조건
테이블에 소속된 특정 컬럼이 중복된 키를 가질 수 없는 조건 ( 아이디, 이메일과 같은 )
기본적인 규칙인듯?
>> 사용자가 로그인을 시도할 때 이메일의 중복을 허용한다면, 이름, 나이, 닉네임과 같은 추가 정보를 입력받아야만 사용자를 특정할 수 있다

CREATE TABLE Users
(
...
    name   varchar(255) NOT NULL UNIQUE
...
);

Unique 조건을 추가하여 이름컬럼은 중복된 값을 허용하지 않는다


- NULL 제약 조건
특정 컬럼이 아무런 값을 입력받지 않도록 설정하거나, 무조건 값을 입력 받도록 설정하는 조건
( 데이터가 없다면, null을 저장하여, 데이터가 존재하지 않다는것을 표현 )
그동안 sql 강의 실습때 null로 표현되는것을 보았다
>>
사용자가 이메일이나, 패스워드를 통해 로그인하는 경우, 해당하는 2개의 정보는 필수로 존재해야하는 컬럼
이러한 필수로 존재해야하는 컬럼이 있다면 NOT NULL  제약 조건을 추가하여 null 값이 입력되는 것을 방지할 수 있다.

CREATE TABLE Users
(
...
    name   varchar(255) NOT NULL
...
);




- 기본 키 (Primary Key) 제약 조건
테이블 내에서 각 행(row)고유하게 식별할 수 있도록 보장하는 조건
기본적인 규칙인듯?

CREATE TABLE Users
(
...
    userId int(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
//AUTO_INCREMENT - DB 내에서 데이터가 입력될 때 마다 숫자를 1씩 증가시켜 기본 키의 고유한 값을 유지
...
);




- 외래 키 (Foreign Key) 제약 조건
테이블 간의 관계를 설정하는 조건
한 테이블의 컬럼(Column)이 다른 테이블의 특정 행(Row)을 참조하도록 설정하는 조건

CREATE TABLE Garden
(
    gardenId INT(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name     VARCHAR(255) NOT NULL,
    address  VARCHAR(255) NOT NULL
);

CREATE TABLE GardenPlants
(
    gardenPlantsId INT(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    gardenId       INT(11)      NOT NULL,
    name           VARCHAR(255) NOT NULL,
    FOREIGN KEY (gardenId) REFERENCES Garden (gardenId)
// gardenId컴럼이 Garden테이블의 gardenId를 참조한다
);



- 외래 키 (Foreign Key) 제약 조건 심화

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE CASCADE
    ON UPDATE CASCADE
// CASCADE - 참조하고 있는 개체가 변경/삭제 될 경우 함께 변경/삭제

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
// ACTION - 참조하고 있는 개체가 변경/삭제 될 경우 아무런 행위를 하지 않고 에러 발생

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE SET NULL
    ON UPDATE SET NULL
// SET NULL - 참조하고 있는 개체가 변경/삭제 될 경우 현재 데이터를 NULL로 변경

FOREIGN KEY (userId) REFERENCES Users(userId)
    ON DELETE SET DEFAULT
    ON UPDATE SET DEFAULT
// SET DEFAULT - 참조하고 있는 개체가 변경/삭제 될 경우 현재 데이터를 기본 값으로 변경



SELECT JOIN 연산자
서로 다른 테이블에서 데이터 조회 시

숙련 1-8까지 수강.
주말동안 남은 강의를 1회독하여 다음주 월요일에는 프로젝트를 시작할 수 있도록 진행할 예정