Spring 입문 230224 #2 Database/SQL

김춘복·2023년 2월 24일
0

Spring 공부

목록 보기
2/14

Database

  • DB : 데이터의 집합. 데이터를 저장하고 관리해준다.

  • DBMS : Database Management System. DB를 관리하고 운영하는 소프트웨어

  • RDBMS : Relational DBMS. 관계형 데이터베이스.
    엑셀처럼 table로 되어있고, table은 행(row)과 열(column)로 이루어져있다.
    MySQL, PostgreSQL, Oracle Database 등이 있다.

SQL

  • SQL : Structured Query Language. RMDBS에서 사용되는 언어.
    표준 SQL이 있지만 DBMS 회사별로 약간의 차이가 있다.

DDL

: Data Definition Language. 테이블이나 관계의 구조를 생성하는데 사용

CREATE

: 새로운 데이터 베이스 및 테이블을 생성해준다.

CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
	필드이름1 필드타입1,
    필드이름2 필드타입2,
    ...
);

제약조건

  • AUTO_INCREMENT : 컬럼의 값이 중복되지 않게 1씩 자동으로 증가하게 해줘 고유번호를 생성
CREATE TABLE 테이블이름
(
	필드이름 필드타입 AUTO_INCREMENT,
    id bigint AUTO_INCREMENT,
    ...
);
  • NOT NULL : 해당 필드는 NULL값을 저장할 수 없게된다.
CREATE TABLE 테이블이름
(
	필드이름 필드타입 NOT NULL,
    ...
);
  • UNIQUE : 해당 필드는 서로 다른 값을 가져야만 한다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입 UNIQUE,
    ...
);
  • PRIMARY KEY: 기본키, 해당 필드가 NOT NULL과 UNIQUE 제약조건의 특징을 모두 가지게 된다.
    테이블 내에서 유일하게 존재하는 값의 조합을 설정해서 중복데이터 삽입 방지하는 제약조건.
    데이터의 중복을 방지해 데이터의 무결성을 지키고
    기본키 설정시 DBMS는 인덱스를 만드는데 중복이 없다는 사실을 알면 데이터를 매우 빠르게 찾을 수 있다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입 PRIMARY KEY,
    ...
);
  • FOREIGN KEY : 외래키, 하나의 테이블을 다른테이블에 의존하게 만들어 데이터의 무결성을 보장
    두개의 테이블을 연결하는 다리역할을 해주는 키
    FK를 가진 테이블이 참조하는 기준 테이블의 열은 반드시 PK, UNIQUE 조건이 설정되어야한다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...
	FOREIGN KEY(필드이름)
    REFERENCES 테이블이름(필드이름)
);
  • CASCADE : FOREIGN KEY로 연관된 데이터를 삭제, 변경할 수 있다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...
	FOREIGN KEY(필드이름)
    REFERENCES 테이블이름(필드이름) ON DELETE CASCADE 
						//ON UPDATE CASCADE
);

ALTER

: 데이터베이스와 테이블의 내용을 수정할 수 있다.

ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
ALTER TABLE 테이블이름 DROP 필드이름;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입;

DROP

: 데이터베이스와 테이블 전체를 삭제한다.

DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;

TRUNCATE

: 최초 테이블이 만들어 졌던 상태 즉, 컬럼값만 남기고 삭제한다.

TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;

DCL

: Data Control Language. 데이터의 사용권한을 관리하는데 사용한다.

  • GRANT : 사용자 또는 ROLE에 대해 권한을 부여할 수 있다.
GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLIC} [WITH GRANT OPTION];

//ex
GRANT SELECT ,INSERT
ON mp
TO scott WITH GRANT OPTION;
  • REVOKE : 사용자 또는 ROLE에 부여한 권한을 회수할 수 잇다.
REVOKE {권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC}
[CASCADE CONSTRAINTS]

//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];

DML

: Data Manipulation Language. 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 쓴다.

  • SELECT : 테이블의 row를 선택(검색)한다.
SELECT 필드이름 FROM 테이블이름 [WHERE 조건];
  • INSERT : 테이블에 새로운 row를 추가(삽입)한다.
INSERT INTO 테이블이름(필드이름1, 필드이름2, ...) VALUES(데이터값1, 데이터값2, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, ...);
  • UPDATE : 테이블의 row의 내용을 수정한다.
UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2,... WHERE 필드이름=데이터값;
  • DELETE : 테이블의 row를 삭제한다.
DELETE FROM 테이블이름 WHERE 필드이름=데이터값;

JOIN

: 나누어진 테이블을 하나로 합치기 위해 데이터베이스가 제공하는 기능.
JOIN 은 ON이라는 키워드를 통해 기준이 되는 컬럼을 선택하여 2개의 테이블을 합쳐 준다
JOIN을 할 때에는 적어도 하나의 컬럼을 서로 공유하고 있어야 하기 때문에 테이블에 외래키가 설정 되어 있다면 해당 컬럼을 통해 JOIN을 하면 해당 조건을 충족할 수 있다.

  • 다만 JOIN을 하기 위해 외래키를 설정하는 것이 항상 좋은 선택이 아닐 수도 있다.
    외래키를 설정하면 데이터 무결성을 확인하는 추가 연산이 발생한다.
    또한 무결성을 지켜야하기 때문에 상황에 따라 개발하는데 불편할 수 있다.

  • 결론은 항상 테이블에 모든 제약조건을 걸어야 하는 것은 아니다. 프로젝트의 상황에 따라 가장 효율적인 제약조건을 테이블에 적용해야한다..

profile
Backend Dev / Data Engineer

0개의 댓글