DB : 데이터의 집합. 데이터를 저장하고 관리해준다.
DBMS : Database Management System. DB를 관리하고 운영하는 소프트웨어
RDBMS : Relational DBMS. 관계형 데이터베이스.
엑셀처럼 table로 되어있고, table은 행(row)과 열(column)로 이루어져있다.
MySQL, PostgreSQL, Oracle Database 등이 있다.
: Data Definition Language. 테이블이나 관계의 구조를 생성하는데 사용
: 새로운 데이터 베이스 및 테이블을 생성해준다.
CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
필드이름1 필드타입1,
필드이름2 필드타입2,
...
);
CREATE TABLE 테이블이름
(
필드이름 필드타입 AUTO_INCREMENT,
id bigint AUTO_INCREMENT,
...
);
CREATE TABLE 테이블이름
(
필드이름 필드타입 NOT NULL,
...
);
CREATE TABLE 테이블이름
(
필드이름 필드타입 UNIQUE,
...
);
CREATE TABLE 테이블이름
(
필드이름 필드타입 PRIMARY KEY,
...
);
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...
FOREIGN KEY(필드이름)
REFERENCES 테이블이름(필드이름)
);
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...
FOREIGN KEY(필드이름)
REFERENCES 테이블이름(필드이름) ON DELETE CASCADE
//ON UPDATE CASCADE
);
: 데이터베이스와 테이블의 내용을 수정할 수 있다.
ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
ALTER TABLE 테이블이름 DROP 필드이름;
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입;
: 데이터베이스와 테이블 전체를 삭제한다.
DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;
: 최초 테이블이 만들어 졌던 상태 즉, 컬럼값만 남기고 삭제한다.
TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;
: Data Control Language. 데이터의 사용권한을 관리하는데 사용한다.
GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLIC} [WITH GRANT OPTION];
//ex
GRANT SELECT ,INSERT
ON mp
TO scott WITH GRANT OPTION;
REVOKE {권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC}
[CASCADE CONSTRAINTS]
//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];
: Data Manipulation Language. 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 쓴다.
SELECT 필드이름 FROM 테이블이름 [WHERE 조건];
INSERT INTO 테이블이름(필드이름1, 필드이름2, ...) VALUES(데이터값1, 데이터값2, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, ...);
UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2,... WHERE 필드이름=데이터값;
DELETE FROM 테이블이름 WHERE 필드이름=데이터값;
: 나누어진 테이블을 하나로 합치기 위해 데이터베이스가 제공하는 기능.
JOIN 은 ON이라는 키워드를 통해 기준이 되는 컬럼을 선택하여 2개의 테이블을 합쳐 준다
JOIN을 할 때에는 적어도 하나의 컬럼을 서로 공유하고 있어야 하기 때문에 테이블에 외래키가 설정 되어 있다면 해당 컬럼을 통해 JOIN을 하면 해당 조건을 충족할 수 있다.
다만 JOIN을 하기 위해 외래키를 설정하는 것이 항상 좋은 선택이 아닐 수도 있다.
외래키를 설정하면 데이터 무결성을 확인하는 추가 연산이 발생한다.
또한 무결성을 지켜야하기 때문에 상황에 따라 개발하는데 불편할 수 있다.
결론은 항상 테이블에 모든 제약조건을 걸어야 하는 것은 아니다. 프로젝트의 상황에 따라 가장 효율적인 제약조건을 테이블에 적용해야한다..