[TIL] Day 24 : RDB, SQL

Q·2024년 5월 20일

TIL

목록 보기
25/59

RDB란?

Relational Database: 쉽게 말해서, 데이터를 엑셀 표처럼 column 마다 다른 속성을 가지는 row들로 데이터를 저장하는 방식이다.

RDBNoSQLExcel file
TableCollectionSheet
RowDocumentRow
ColumnFieldColumn
  • Examples of NoSQL:
    MongoDB, Google Firebase

  • Examples of RDB:
    Oracle, MySQL, AWS RDS

SQL (Structured Query Language) 이란?

DB에서 사용되는 생성, 삽입, 조회 명령문으로서
모든 데이터들을 공통적으로 관리할 수 있는 표준 언어다.

SQL의 종류 1)   DDL (Data Definition Language)

데이터의 구조, 속성 등을 설정

  • CREATE : DB, Table, View, Index 등을 생성
    ex: CREATE TABLE 테이블명
  • DROP : DB, Table, View, Index 등을 삭제
    ex: DROP TABLE 테이블명
  • ALTER : DB, Table, View, Index 등의 속성을 변경
    • ADD
      ex: ALTER TABLE 테이블명 ADD COLUMN 컬럼명;
    • DROP
      ex: ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
    • MODIFY
      ex: ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 int(11) NOT NULL;
    • RENAME
      ex: ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 새컬럼명;

SQL의 종류 2)   DML (Data Manipulation Language)

데이터의 값을 CRUD 조작

  • INSERT : Table에 새로운 데이터를 삽입
    INSERT INTO 테이블이름 (컬럼이름) VALUES (데이터);
  • SELECT : Table에서 특정 조건에 맞는 데이터를 조회 ⭐️
    SELECT FROM 테이블이름 WHERE 조건;
    • WHERE 조건이 없다면, 모든 데이터가 조회
  • UPDATE : Table에서 특정 조건에 맞는 데이터를 삭제
    UPDATE FROM 테이블이름 WHERE 조건;
    • WHERE 조건이 없다면, 모든 데이터가 삭제되니 주의!
  • DELETE : Table에서 특정 조건에 맞는 데이터를 삭제
    DELETE FROM 테이블이름 WHERE 조건;
    • WHERE 조건이 없다면, 모든 데이터가 삭제되니 주의!

SQL의 종류 3)   DCL (Data Control Language)

DB에 대한 권한 설정
(개발자마다 DB에 접근할 수 있는 권한을 다르게 줘야하는 상황이 있기 때문)

  • GRANT : DB의 특정한 user에게 사용권한을 부여
    GRANT 권한 ON 객체명 TO 사용자;
  • REVOKE : DB의 특정한 user에게 사용권한을 취소
    GRANT 권한 ON 객체명 FROM 사용자;

SQL의 종류 4)   TCL (Transaction Control Language)

DB 내의 transaction을 관리

  • START TRANSACTION : transaction을 시작

  • COMMIT : DB의 작업이 정상적으로 완료되었음을 관리자에게 알려준다.

  • ROLLBACK : DB의 작업이 비정상적으로 완료되었음을 관리자에게 알려준다. transaction을 시작했던 순간으로 롤백.

⭐️ SQL의 Constraints :

각 Column이 만족해야하는 constraint, 즉 제약 조건을 부여한다. 이로 인해, DB의 데이터들이 그 조건들을 violate하지 않는다는 걸 보장해준다. 이것을 데이터의 무결성(integrity)이라고 한다.

Constraints의 종류

  • 데이터 타입 (string, int, datetime)
  • 데이터 사이즈 (글자 또는 숫자의 길이)
  • null 허용 여부
  • uniqueness 여부
  • primary key : 각 row를 고유하게 식별할 수 있도록 보장하는 조건
  • foreign key : table 간의 관계를 설정하는 조건

Constraints의 example : 회원가입

  • 입력한 아이디 또는 이메일 주소가 이미 존재하는지 확인 (중복 확인)
  • 입력한 비밀번호가 생성 조건을 만족하지 않는지 확인
  • 필수 기입 정보가 입력되지 않았는지 확인

NULL 허용 여부 변경

  • 특정 column의 NULL을 YES ⇒ NO 로 변경:
    ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼이름 데이터타입그대로 NOT NULL;

  • 특정 column의 NULL을 NO ⇒ YES 로 바꾸려고 할 때:
    ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼이름 데이터타입그대로 NULL;

데이터 타입을 안 건드리고 NULL ⇔ NOT NULL 만 바꾸고 싶어도 그것만 변경할 수 있는 명령어는 없는 것 같다. 검색해봤을 때는,
ALTER TABLE 테이블이름 ALTER COLUMN 컬럼이름 DROP NOT NULL;
이렇게 하면 된다고 나와 있었는데, 따라해보니 에러 뜨고 안 된다.
어쩔 수 없이 MODIFY 를 이용해서 수정하지 않을 데이터타입도 그대로 다시 써줘야 한다. 상당히 귀찮은 일이군..

UNIQUENESS 변경

  • 특정 column의 UNIQUE 제약조건 부여:
    ALTER TABLE Users ADD UNIQUE (컬럼이름) 괄호 필수!

  • 특정 column의 UNIQUE 제약조건 제거:
    ALTER TABLE Users DROP INDEX 컬럼이름

유니크 제약 조건은 내부적으로 INDEX로 구현되기 때문에, INDEX를 제거하는 방식으로 유니크 제약 조건을 제거해야 한다.

0개의 댓글