블로그 이름 뭐하지
[SQL] Database와 SQL 본문
Database
데이터의 집합으로, 우리가 사용하는 메세지, 인스타그램의 사진 등의 정보를 저장하고 관리한다.
DBMS
Database Management System의 약자로 Database를 관리하고 운영하는 소프트 웨어.
RDBMS
Relational DBMS의 약자로 관계형 데이터베이스를 뜻한다.
MySQL, PostgreSQL 이 대표적인 RDBMS이다.
RDBMS는 테이블(table)이라는 최소 단위로 구성되며,
테이블은 열(Column)과 행(Row)로 이루어져있다.
테이블 간 FK(Foreign Key)를 통해 다른 데이터를 조합해 함께 볼 수 있다.
테이블 예시
column 명 | id | name | telNumber | group |
1row | ka123 | 카즈하 | 010-1111-1111 | 르세라핌 |
2row | kim123 | 김채원 | 010-2222-2222 | 르세라핌 |
3row | sa123 | 사쿠라 | 10-3333-3333 | 르세라핌 |
SQL
Structured Query Language의 약자로 RDBMS에서 사용되는 언어이다.
각 회사마다 차이가 존재한다. 현재는 MySQL을 기준으로 설명한다.
DDL
Data Definition Language의 약자로 테이블이나 관계의 구조를 생성하는 데 사용한다.
1) CREATE
새로운 데이터 베이스 및 테이블을 생성해준다.
CREATE DATABASE 데이터베이스명;
CREATE TABLE 테이블명
(
필드명1 필드타입1,
필드명2 필드타입2,
...
);
2) ALTER
데이터베이스와 테이블의 내용을 수정한다.
ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
ALTER TABLE 테이블이름 DROP 필드이름;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입;
3) DROP
데이터 베이스와 테이블을 삭제할 수 있다.
데이터 및 테이블 전체를 삭제한다.
DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;
4) TRUNCATE
데이터 베이스와 테이블을 삭제한다.
최초 테이블이 만들어졌던 상태, 즉 컬럼 값만 남긴다.
TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;
DCL
Data Control Language의 약자로 데이터의 사용권한을 관리하는 데 사용한다.
1) GRANT
사용자 또는 Role에 대해 권한을 부여할 수 있다.
GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLC} [WITH GRANT OPTION];
//ex
GRANT SELECT ,INSERT
ON mp
TO scott WITH GRANT OPTION;
2) REVOKE
사용자 또는 Role에 부여한 권한을 회수할 수 있다.
REVOKE { 권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC}
[CASCADE CONSTRAINTS];
//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];
DML
Data Manipulation Language의 약자로 테이블에 데이터를 검색, 삽입, 수정, 삭제 할 수 있다.
1) INSERT
테이블에 새로운 row를 추가한다.
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);
2) SELECT
테이블의 새로운 row를 선택한다
SELECT 필드이름 FROM 테이블이름 [WHERE 조건];
3) UPDATE
테이블의 row 내용을 수정한다
UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값;
4) DELETE
테이블의 row를 삭제한다
DELETE FROM 테이블이름 WHERE 필드이름=데이터값;
CREATE 제약조건
1) AUTO_INCREMENT
컬럼의 값이 중복되지 않게 1씩 자동으로 증가시킨다.(고유번호 생성)
CREATE TABLE 테이블이름
(
필드이름 필드타입 AUTO_INCREMENT,
// id bigint AUTO_INCREMENT,
...
);
2) NOT NULL
제약이 걸린 필드는 NULL 값을 저장할 수 없게 된다.
CREATE TABLE 테이블이름
(
필드이름 필드타입 AUTO_INCREMENT,
// id bigint AUTO_INCREMENT,
...
);
3) UNIQUE
해당 필드는 서로 다른 값을 가져야 한다.
CREATE TABLE 테이블이름
(
필드이름 필드타입 UNIQUE,
...
);
4) PRIMARY KEY(기본키)
해당 필드가 NOT NULL과 UNIQUE 제약조건의 특징을 모두 가진다.
유일하게 존재하는 값의 조합을 설정하여 중복된 데이터가 테이블에 삽입되는 것을 방지한다.
주민번호 컬럼에 기본키가 설정되어있지 않다면 DBMS는 주민번호의 중복을 가정하고 5000만 row를 모두 확인한다.
기본키 설정을 할 경우 하나만 찾으면 해당 데이터를 반환한다.
CREATE TABLE 테이블이름
(
필드이름 필드타입 PRIMARY KEY,
...
);
5) FOREIGN KEY(외래키)
하나의 테이블을 다른 테이블에 의존하게 만들어 데이터의 무결성을 보장한다.
FK를 가지는 테이블이 참조하는 기존 테이블의 열(column)은 반드시 PK, UNIQUE 제약조건이 설정되어 있어야 한다.
외래키는 두개의 테이블을 연결하는 다리 역할을 한다.
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...
FOREIGN KEY(필드이름)
REFERENCES 참조할 테이블이름(참조할 필드이름)
);
▷CASCADE
FK로 연관된 데이터를 삭제, 변경할 수 있다.
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...
FOREIGN KEY(필드이름)
REFERENCES 테이블이름(필드이름) ON DELETE CASCADE
//ON UPDATE CASCADE
);