코드 그라데이션

[SC] 데이터베이스와 SQL 본문

Database

[SC] 데이터베이스와 SQL

완벽한 장면 2023. 1. 15. 09:26

* 데이터베이스 - 데이터의 집합

* RDBMS - Database Management System : 데이터베이스를 관리하고 운영하는 소프트웨어

 

* Database Server 

- 데이터베이스 역시 프로그램이다. 서버 끼리도 당연히 통신이 가능하다.

 

SQL 

- Structured Query Language - RDBMS에서 사용하는 언어.

: 수많은 정보를 Database에서 조작하고 관리하기 위해서 SQL 언어를 사용함.

 

DDL

- ‘Data Definition Language’ 의 약자로 테이블이나 관계의 구조를 생성하는데 사용

  • CREATE : 새로운 데이터베이스 및 테이블을 생성해 줌.
CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
		필드이름1 필드타입1,
    필드이름2 필드타입2,
    ...
);

 

  • 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 { 유저명 | 롤명 | PUBLC} [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’ 의 약자로 ****테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용.

  • INSERT : 테이블에 새로운 row를 추가할 수 있다.
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);

 

  • SELECT : 테이블의 row를 선택
SELECT 필드이름 FROM 테이블이름 [WHERE 조건];

 

  • UPDATE : 테이블의 row의 내용을 수정
UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값;

 

  • DELETE : 테이블의 row를 삭제
DELETE FROM 테이블이름 WHERE 필드이름=데이터값;

 

[CREATE의 제약조건]

1) AUTO_INCREMENT : 컬럼의 값이 중복되지 않게 1씩 자동으로 증가하게 해줘 고유번호를 생성해준다.

CREATE TABLE 테이블이름
(
    필드이름 필드타입 AUTO_INCREMENT,
    // id bigint AUTO_INCREMENT,
    ...
);

 

2) NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 된다.

CREATE TABLE 테이블이름
(
    필드이름 필드타입 NOT NULL,
    ...
);

 

3) UNIQUE : 해당 필드는 서로 다른 값을 가져야 한다.

CREATE TABLE 테이블이름
(
    필드이름 필드타입 UNIQUE,
    ...
);

 

4) PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 된다.

CREATE TABLE 테이블이름
(
    필드이름 필드타입 PRIMARY KEY,
    ...
);

// 즉,  NULL값을 가질 수 없고, 서로 다른 값을 가져야 한다는 뜻이겠지.

 

PRIMARY KEY 톺아보기

- 기본키는 테이블 내에서 '유일하게 존재하는 값의 조합'을 설정해서 중복된 데이터가 테이블에 삽입되는 것을 방지하는 제약조건이다.

 

기본키를 사용하는 이유?

1️⃣ 데이터의 중복을 방지.

  • 만약 기본키를 설정하지 않고서 회원을 관리하는 테이블이 있을 때 기존에 있던 회원이 예전에 가입한 것을 잊고서 다시 회원가입을 하는데 최근에 번호 및 주소가 바뀌었다면?

우리는 둘 중에 어느 정보가 정확한 정보인지 판단하기 어렵다. 즉, 데이터의 무결성이 깨진다는 뜻이지

 

2️⃣ 데이터를 매우 빠르게 찾을 수 있게 됨.

  • 기본키를 설정하면 DBMS는 인덱스(일종의 값 빨리 찾는 목차)를 생성함.
  • ex) 만약 주민번호 컬럼에 기본키가 설정 되어있지 않는다면 ?
    • 우리는 주민번호가 절대 중복될 수 없다는 것을 알지만 DBMS는 그것을 모르기 때문에 주민번호가 중복될 수 있는 것을 가정하여 5000만 row를 전부 확인...
    • 이럴 때 주민번호에 기본키 설정이 되어있으면 row를 전부 확인하지 않고 1개만 찾으면 바로 해당 데이터를 반환

 

 

5) FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만들며 데이터의 무결성을 보장해준다.

CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...
		FOREIGN KEY(필드이름)
    REFERENCES 테이블이름(필드이름)
);

 

- FK 를 가지는 테이블이 참조하는 기준 테이블의 열은 반드시 PK, UNIQUE 제약조건이 설정되어 있어야 한다.

즉, Not Null과 UNIQUE 제약조건이 설정되어 있어야 한다는 뜻이겠지.

 

ex) 음식점에서 주문을 받는 상황을 가정해본다면,

     중복된 데이터도 생길 수 있거니와, 어느 사용자가 무슨 주문을 했는지 파악하기 어려워지는 문제가 발생할 수 있음.

  • 외래키를 사용하면 중복되는 데이터를 없애고 주문 테이블에서 외래키를 사용해서 사용자 테이블에 접근해 주문을 한 사용자의 정보도 가져올 수 있게 됩니다.
  • 추가로 기본키가 하나의 테이블에서 중복된 데이터가 삽입되는 것을 방지하는 역할을 해주는데 외래키 역시 비슷한 문제를 방지하는 역할을 수행합니다.
  • ======> 주문 테이블에 새로운 주문이 들어왔는데, 여기 들어가는 회원 id가 현재 주문 테이블에 존재하는 회원 id가 아니라면, 저장을 시키지 않고 데이터 무결성을 지킬 수 있다는 것 
  • 외래키는 데이터가 새롭게 추가될 때 외래키에 해당하는 값이 외래키가 참조하는 테이블에 존재하는지를 확인합니다.
  • 종합해보면, 외래키 사용을 통해 데이터 무결성을 지킬 수 있다고 하지.

 

 

6) CASCADE : FOREIGN KEY 로 연관된 데이터를 삭제,변경할 수 있다.

CREATE TABLE 테이블이름
(
    필드이름 필드타입,
    ...
		FOREIGN KEY(필드이름)
    REFERENCES 테이블이름(필드이름) ON DELETE CASCADE
    							   //ON UPDATE CASCADE
);

 

<참고>

** 기본적으로 VALUES 뒤에 순서대로 값을 넣어주면 모든 칼럼에 값을 넣어줄 수 있다. 

  하지만 테이블을 생성할 때, NULL을 허용하게 만든다면, 값을 넣어줄 필요가 없을 수도 있다.

  그럴 때는 이처럼 VALUES 앞에 값을 넣어줄 칼럼명을 명시해주면 된다.

 

INSERT INTO STUDENT VALUES('s11', '변정섭', '20220222', 'M', '01000000020', 'm2');

// 두 개 차이 잘 비교해봐
INSERT INTO STUDENT(student_code, name, gender, major_code) VALUES('s12', '권오빈', 'M', 'm3');

 

 

 

 

728x90

'Database' 카테고리의 다른 글

데이터베이스 설계 관련 규칙과 제약조건  (0) 2023.01.15
데이터베이스(Database, DB)  (0) 2023.01.15
mySQL Naming 규칙  (0) 2023.01.15
Comments