CREATE

회원 데이터 베이스 생성 : CREATE

CREATE DATABASE IF NOT EXISTS mysite;
mysql> CREATE DATABASE IF NOT EXISTS mysite;
Query OK, 1 row affected (0.01 sec)

※ IF NOT EXISTS [데이터베이스명] : 데이터베이스가 없다면이라는 조건

회원 테이블 생성 : CREATE

데이터베이스 선택 후 테이블 생성

mysql> use mysite;
Database changed

CREATE TABLE `member` (
    `mb_no` int AUTO_INCREMENT,  /* 회원 인덱스 */
    `mb_id` varchar(20) NOT NULL,  /* 아이디 */
    `mb_password` varchar(255) NOT NULL,  /* 비밀번호 */
    `mb_name` varchar(50) NOT NULL, /* 이름 */
    `mb_email` varchar(100) NOT NULL,  /* 이메일 */
    `mb_hp` varchar(20) DEFAULT NULL,  /* 핸드폰 */
    `mb_addr` varchar(255) DEFAULT NULL,  /* 주소 */
    `mb_birth` date DEFAULT NULL,  /* 생일 */
    `mb_sex` char(1) DEFAULT NULL,  /* 성별 */
    `mb_level` int DEFAULT '1',  /* 권한 */
    `mb_point` int DEFAULT 0, /* 포인트 */

    PRIMARY KEY (`mb_no`),
    UNIQUE (`mb_id`)
);

결과


mysql> CREATE TABLE `member` (
    ->     `mb_no` int AUTO_INCREMENT,  /* 회원 인덱스 */
    ->     `mb_id` varchar(20) NOT NULL,  /* 아이디 */
    ->     `mb_password` varchar(255) NOT NULL,  /* 비밀번호 */
    ->     `mb_name` varchar(50) NOT NULL, /* 이름 */
    ->     `mb_email` varchar(100) NOT NULL,  /* 이메일 */
    ->     `mb_hp` varchar(20) DEFAULT NULL,  /* 핸드폰 */
    ->     `mb_addr` varchar(255) DEFAULT NULL,  /* 주소 */
    ->     `mb_birth` date DEFAULT NULL,  /* 생일 */
    ->     `mb_sex` char(1) DEFAULT NULL,  /* 성별 */
    ->     `mb_level` int DEFAULT '1',  /* 권한 */
    ->     `mb_point` int DEFAULT 0, /* 포인트 */
    ->
    ->     PRIMARY KEY (`mb_no`), 
    ->     UNIQUE (`mb_id`)
    -> );
Query OK, 0 rows affected (0.04 sec)

회원 데이터 입력 : INSERT

INSERT INTO `member` (`mb_id`, `mb_password`, `mb_name`, `mb_email`, `mb_hp`,  `mb_addr`, `mb_birth`, `mb_sex`, `mb_level`, `mb_point`) VALUES
('user001', 'password123', '홍길동', 'hong1@example.com', '010-1111-2222',  '서울시 강남구', '1990-05-12', 'M', 1, 3000);
mysql> INSERT INTO `member` (`mb_id`, `mb_password`, `mb_name`, `mb_email`, `mb_hp`,  `mb_addr`, `mb_birth`, `mb_sex`, `mb_level`, `mb_point`) VALUES
    -> ('user001', 'password123', '홍길동', 'hong1@example.com', '010-1111-2222',  '서울시 강남구', '1990-05-12', 'M', 1, 3000);
Query OK, 1 row affected (0.00 sec)

mysql> select * from member;
+-------+---------+-------------+---------+-------------------+---------------+---------------+------------+--------+----------+----------+
| mb_no | mb_id   | mb_password | mb_name | mb_email          | mb_hp         | mb_addr       | mb_birth   | mb_sex | mb_level | mb_point |
+-------+---------+-------------+---------+-------------------+---------------+---------------+------------+--------+----------+----------+
|     1 | user001 | password123 | 홍길동  | hong1@example.com | 010-1111-2222 | 서울시 강남구 | 1990-05-12 | M      |        1 |     3000 |
+-------+---------+-------------+---------+-------------------+---------------+---------------+------------+--------+----------+----------+
1 row in set (0.00 sec)

AUTO_INCREMENT

특정 열에 AUTO_INCREMENT를 사용하면 1씩 또는 사용자가 지정한만큼 증가하며 PK를 지정해줘야한다

회원 데이터 여러 명 입력 : INSERT

회원을 여러명 추가하고 기본키는 자동으로 증가가 되지만 직접 입력도 가능하다.


INSERT INTO `member` (`mb_no`,`mb_id`, `mb_password`, `mb_name`, `mb_email`, `mb_hp`,  `mb_addr`, `mb_birth`, `mb_sex`, `mb_level`, `mb_point`) VALUES
(3,'user002', 'password456', '김영희', 'kim2@example.com', '010-2233-4455', '경기도 수원시', '1992-07-23', 'F', 2, 5000),
(4,'user003', 'password789', '이철수', 'lee3@example.com', '010-3344-5566', '부산시 해운대구', '1985-10-30', 'M', 3, 5000),
(10,'user004', 'password012', '박지영', 'park4@example.com', '010-4455-6677', '인천시 부평구', '1995-03-15', 'F', 1, 5000),
(11,'user005', 'password345', '최민수', 'choi5@example.com', '010-5566-7788', '대전시 서구', '1993-12-05', 'M', 2, 5000),
(12,'user006', 'password678', '윤수진', 'yoon6@example.com', '010-6677-8899', '울산시 남구', '1988-01-19', 'F', 1, 5000);


mysql> INSERT INTO `member` (`mb_no`,`mb_id`, `mb_password`, `mb_name`, `mb_email`, `mb_hp`,  `mb_addr`, `mb_birth`, `mb_sex`, `mb_level`, `mb_point`) VALUES
    -> (3,'user002', 'password456', '김영희', 'kim2@example.com', '010-2233-4455', '경기도 수원시', '1992-07-23', 'F', 2, 5000),
    -> (4,'user003', 'password789', '이철수', 'lee3@example.com', '010-3344-5566', '부산시 해운대구', '1985-10-30', 'M', 3, 5000),
    -> (10,'user004', 'password012', '박지영', 'park4@example.com', '010-4455-6677', '인천시 부평구', '1995-03-15', 'F', 1, 5000),
    -> (11,'user005', 'password345', '최민수', 'choi5@example.com', '010-5566-7788', '대전시 서구', '1993-12-05', 'M', 2, 5000),
    -> (12,'user006', 'password678', '윤수진', 'yoon6@example.com', '010-6677-8899', '울산시 남구', '1988-01-19', 'F', 1, 5000);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from member;
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
| mb_no | mb_id   | mb_password | mb_name | mb_email          | mb_hp         | mb_addr         | mb_birth   | mb_sex | mb_level | mb_point |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
|     1 | user001 | password123 | 홍길동  | hong1@example.com | 010-1111-2222 | 서울시 강남구   | 1990-05-12 | M      |        1 |     3000 |
|     3 | user002 | password456 | 김영희  | kim2@example.com  | 010-2233-4455 | 경기도 수원시   | 1992-07-23 | F      |        2 |     5000 |
|     4 | user003 | password789 | 이철수  | lee3@example.com  | 010-3344-5566 | 부산시 해운대구 | 1985-10-30 | M      |        3 |     5000 |
|    10 | user004 | password012 | 박지영  | park4@example.com | 010-4455-6677 | 인천시 부평구   | 1995-03-15 | F      |        1 |     5000 |
|    11 | user005 | password345 | 최민수  | choi5@example.com | 010-5566-7788 | 대전시 서구     | 1993-12-05 | M      |        2 |     5000 |
|    12 | user006 | password678 | 윤수진  | yoon6@example.com | 010-6677-8899 | 울산시 남구     | 1988-01-19 | F      |        1 |     5000 |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
6 rows in set (0.00 sec)

AUTO_INCREMENT로 생성된 마지막 값 확인

LAST_INSERT_ID()를 사용하면 AUTO_INCREMENT로 생성된 마지막 인덱스를 알 수 있으며 직접 지정한 PK는 알 수 없다. 주로 이용하는 방법은 게시판에 글과 첨부파일을 올린다고 가정했을 때 게시글을 올리고 얻어낸 LAST_INSERT_ID()로 첨부파일 게시판에 외래키로 사용하곤 한다.

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

회원 삭제 : DELETE

mb_no(기본키)가 10보다 큰 데이터를 삭제


mysql> delete from member where mb_no > 10;
Query OK, 2 rows affected (0.00 sec)

mysql> select * from member;
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
| mb_no | mb_id   | mb_password | mb_name | mb_email          | mb_hp         | mb_addr         | mb_birth   | mb_sex | mb_level | mb_point |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
|     1 | user001 | password123 | 홍길동  | hong1@example.com | 010-1111-2222 | 서울시 강남구   | 1990-05-12 | M      |        1 |     3000 |
|     3 | user002 | password456 | 김영희  | kim2@example.com  | 010-2233-4455 | 경기도 수원시   | 1992-07-23 | F      |        2 |     5000 |
|     4 | user003 | password789 | 이철수  | lee3@example.com  | 010-3344-5566 | 부산시 해운대구 | 1985-10-30 | M      |        3 |     5000 |
|    10 | user004 | password012 | 박지영  | park4@example.com | 010-4455-6677 | 인천시 부평구   | 1995-03-15 | F      |        1 |     5000 |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
4 rows in set (0.00 sec)

INSERT - SELECT

다른 테이블의 내용을 조회해서 INSERT하는 방법도 가능하다
아래 예시는 member 테이블에 mb_point가 5000이상인 사람을 조회해서 INSERT하는 방법이다.

point 테이블 생성


CREATE TABLE point (

    p_no int,
    p_name varchar(50),
    p_point int

);

mysql> CREATE TABLE point (
    ->
    ->     p_no int,
    ->     p_name varchar(50),
    ->     p_point int
    ->
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> select * from point;
Empty set (0.00 sec)

포인트가 5000 이상인 사람 조회

mysql> select mb_no as p_no, mb_name as p_name, mb_point as p_point from member where mb_point >= 5000;
+------+--------+---------+
| p_no | p_name | p_point |
+------+--------+---------+
|    3 | 김영희 |    5000 |
|    4 | 이철수 |    5000 |
|   10 | 박지영 |    5000 |
+------+--------+---------+
3 rows in set (0.00 sec)

point 테이블에 INSERT

insert into point select mb_no as p_no, mb_name as p_name, mb_point as p_point from member where mb_point >= 5000;
mysql> insert into point select mb_no as p_no, mb_name as p_name, mb_point as p_point from member where mb_point >= 5000;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from point;
+------+--------+---------+
| p_no | p_name | p_point |
+------+--------+---------+
|    3 | 김영희 |    5000 |
|    4 | 이철수 |    5000 |
|   10 | 박지영 |    5000 |
+------+--------+---------+
3 rows in set (0.00 sec)

※ 타회사 디비 이전(마이그레이션)을 할 때 INSERT SELECT를 자주 사용했었다.
테이블 구조가 유사하면 작업이 수월하지만 대부분 다르기 때문에 별칭으로 컬럼명과 순서까지 회사의 테이블 구조에 맞춰서 일단 조회를 하고 INSERT를 진행했다.

※ 로컬에서 테이블 및 sql 작업을하고 import 하는 것을 추천

※ 디비 이전시 csv파일 편집하는 방법도 가능하나 게시판의 내용에서 태그나 따옴표 등 때문에 셀 영역을 벗어나서 간단한 데이터가 아니면 하지 않은 것을 추천.

AUTO_INCREMENT 시작값 변경

AUTO_INCREMENT 시작값을 101부터 생성되게 변경

ALTER TABLE member AUTO_INCREMENT = 101;

Primary key 오름차순으로 업데이트하기

SET @idx = 0;
UPDATE `member` 
SET `mb_no` = (@idx := @idx + 1)
mysql> select * from member;
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
| mb_no | mb_id   | mb_password | mb_name | mb_email          | mb_hp         | mb_addr         | mb_birth   | mb_sex | mb_level | mb_point |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
|     1 | user001 | password123 | 홍길동  | hong1@example.com | 010-1111-2222 | 서울시 강남구   | 1990-05-12 | M      |        1 |     3000 |
|     3 | user002 | password456 | 김영희  | kim2@example.com  | 010-2233-4455 | 경기도 수원시   | 1992-07-23 | F      |        2 |     5000 |
|     4 | user003 | password789 | 이철수  | lee3@example.com  | 010-3344-5566 | 부산시 해운대구 | 1985-10-30 | M      |        3 |     5000 |
|    10 | user004 | password012 | 박지영  | park4@example.com | 010-4455-6677 | 인천시 부평구   | 1995-03-15 | F      |        1 |     5000 |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
4 rows in set (0.00 sec)

mysql> SET @idx = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE `member`
    -> SET `mb_no` = (@idx := @idx + 1);
Query OK, 3 rows affected, 1 warning (0.00 sec)
Rows matched: 4  Changed: 3  Warnings: 1

mysql> select * from member;
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
| mb_no | mb_id   | mb_password | mb_name | mb_email          | mb_hp         | mb_addr         | mb_birth   | mb_sex | mb_level | mb_point |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
|     1 | user001 | password123 | 홍길동  | hong1@example.com | 010-1111-2222 | 서울시 강남구   | 1990-05-12 | M      |        1 |     3000 |
|     2 | user002 | password456 | 김영희  | kim2@example.com  | 010-2233-4455 | 경기도 수원시   | 1992-07-23 | F      |        2 |     5000 |
|     3 | user003 | password789 | 이철수  | lee3@example.com  | 010-3344-5566 | 부산시 해운대구 | 1985-10-30 | M      |        3 |     5000 |
|     4 | user004 | password012 | 박지영  | park4@example.com | 010-4455-6677 | 인천시 부평구   | 1995-03-15 | F      |        1 |     5000 |
+-------+---------+-------------+---------+-------------------+---------------+-----------------+------------+--------+----------+----------+
4 rows in set (0.00 sec)

Error Code : 1175 발생시

간혹 DBMS툴에서 에러코드 1175가 발생할 수 있다

11:59:47    UPDATE `member`  SET `mb_no` = (@idx := @idx + 1) ORDER BY `mb_no`    Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.    0.000 sec

Safe Update Mode가 활성화 중인지 확인 (0 : 비활성화 / 1 : 활성화)

SELECT @@SQL_SAFE_UPDATES;

Safe Update Mode 비활성화(현재 세션)

SET SQL_SAFE_UPDATES = 0;

Safe Update Mode 다시 활성화

SET SQL_SAFE_UPDATES = 1;
반응형

데이터베이스 및 테이블 생성 예제

데이터베이스명은 std이고 테이블명 student으로 생성하기로 정하고
create, insert, select, update, delete를 진행해본다.

1. 학생 디비 생성

mysql> create database stu;
Query OK, 1 row affected (0.01 sec)

2. 학생 테이블 생성

테이블명 : student

필드

컬럼명 타입 용도
std_id int primary key 학번 인덱스
std_name char(10) 학생 이름
std_dpt varchar(20) 학과
std_tel varchar(20) 연락처
std_addr varchar(20) 주소
mysql> create table student (std_id int primary key, std_name char(10), std_dpt varchar(20), std_tel varchar(20), std_addr varchar(50));
Query OK, 0 rows affected (0.02 sec)

3. 학생 데이터 입력

mysql> insert into student(std_id, std_name, std_dpt, std_tel, std_addr) values (1, "박명수", "영어영문학과", "010-5555-7878", "제주특별자치도시");
Query OK, 1 row affected (0.00 sec)

mysql> insert into student(std_id, std_name, std_tel) value (3, "한길동", "010-3333-3333");
Query OK, 1 row affected (0.00 sec)

4. 학생 데이터 여러 개 입력

INSERT INTO 테이브블명 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...), (값1, 값2, ...);
mysql> insert into student(std_id, std_name, std_dpt, std_tel, std_addr) values (4, "정형돈", "컴퓨터공학과", "010-1313-1414", "광주광역시"), (5, "노홍철", " 신문방송학과", "010-2222-7114", "경기도");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

4. 학생 데이터 조회

mysql> select * from student;
+--------+----------+--------------+---------------+------------------+
| std_id | std_name | std_dpt      | std_tel       | std_addr         |
+--------+----------+--------------+---------------+------------------+
|      1 | 박명수   | 영어영문학과  | 010-5555-7878  | 제주특별자치도시  |
|      3 | 한길동   | NULL         | 010-3333-3333  | NULL             |
|      4 | 정형돈   | 컴퓨터공학과  | 010-1313-1414  | 광주광역시        |
|      5 | 노홍철   | 신문방송학과  | 010-2222-7114  | 경기도            |
+--------+----------+--------------+---------------+------------------+
4 rows in set (0.00 sec)
2 rows in set (0.00 sec)

5. 학생 테이터 수정


UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;

mysql> update student set std_dpt = "AI학과" where std_id = 3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student;
+--------+----------+--------------+---------------+------------------+
| std_id | std_name | std_dpt      | std_tel       | std_addr         |
+--------+----------+--------------+---------------+------------------+
|      1 | 박명수   | 영어영문학과   | 010-5555-7878 | 제주특별자치도시 |
|      3 | 한길동   | AI학과        | 010-3333-3333 | NULL             |
|      4 | 정형돈   | 컴퓨터공학과   | 010-1313-1414 | 광주광역시       |
|      5 | 노홍철   | 신문방송학과   | 010-2222-7114 | 경기도           |
+--------+----------+--------------+---------------+------------------+
4 rows in set (0.00 sec)

6. 학생 데이터 삭제

DELETE FROM 테이블명 WHERE 조건;

mysql> delete from student where std_id = 5;
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+--------+----------+--------------+---------------+------------------+
| std_id | std_name | std_dpt      | std_tel       | std_addr         |
+--------+----------+--------------+---------------+------------------+
|      1 | 박명수   | 영어영문학과 | 010-5555-7878 | 제주특별자치도시 |
|      3 | 한길동   | AI학과       | 010-3333-3333 | NULL             |
|      4 | 정형돈   | 컴퓨터공학과 | 010-1313-1414 | 광주광역시       |
+--------+----------+--------------+---------------+------------------+
3 rows in set (0.00 sec)

7. 학생 데이터 모두 삭제

DELETE FROM 테이블명

※ 쿼리문 작성 시 where은 필수로 넣고 최소 테이블이나 디비 백업을 해두고 작업하는 편이 좋다.

mysql> delete from student;
Query OK, 3 rows affected (0.00 sec)

mysql> select * from student;
Empty set (0.00 sec)
반응형

'MYSQL' 카테고리의 다른 글

[MYSQL][06] 외래키(Foreign Key, FK)의 참조 무결성  (0) 2024.11.25
[MYSQL][05] KEY  (0) 2024.11.24
[MYSQL][04] SELECT  (0) 2024.11.22
[MYSQL][03] CREATE : 회원 테이블 생성  (0) 2024.11.21
[MYSQL][01] 데이터베이스(DataBase, DB)-1  (1) 2024.11.19

[MYSQL][01] 데이터베이스(DataBase, DB)-1

목차

1. 데이터베이스란?

2. 데이터베이스의 역할

3. 데이터베이스의 장단점

4. 데이터베이스 관리 시스템

5. 데이터베이스의 종류

6. SQL(Structured Query Language, SQL)이란?

7. SQL문법 종류

8. 데이터베이스 생성 및 삭제

9. 테이블 생성 및 삭제

10. 데이터 삽입, 조회, 수정, 삭제

1. 데이터베이스란?

공유(Share)할 목적으로 통합(Integrate) 관리를 위해 일정한 형태로 저장(Stored)한 데이터를 데이터베이스라고 한다.

데이터베이스의 정의 : ISOS

Integrated Data(통합된 데이터) : 중복을 최소화 한 데이터
Stored Data(저장된 데이터) : 컴퓨터가 접근가능한 위치에 저장된 데이터
Operational Data(운영 데이터) : 업무수행을 위해 반드시 필요한 데이터
Shared Data(공용 데이터) : 여러 응용시스템이 공동 소유 및 유지하는 데이터

데이터베이스 시스템의 특징 : R1C3

Real Time Accessibility(실시간 접근성) : 질의에 실시간 응답 처리
Continuous Evolution(지속적인 변화) : 최신 데이터를 동적으로 유지(삽입, 삭제, 수정)
Concurrent Sharing(동시 공유) : 목적이 다른 사용자가 동시에 원하는 데이터 공유
Content Reference(내용에 의한 참조) : 주소에 의한 참조가 아닌 사용자가 요구하는(질의에 따른) 데이터 내용을 참조

2. 데이터베이스의 역할

중복데이터의 배제가 아닌 최소화하여 목적에 맞게 관리

3. 데이터베이스의 장단점

장점

  • 데이터 중복 방지
    • 데이터를 중앙에서 관리하여 중복을 최소화, 일관성 있는 데이터를 유지
  • 효율적인 저장공간 사용
    • 중복을 제거하고, 데이터를 정규화하여 저장 공간을 절약
  • 빠른 데이터 접근
    • 인덱싱, 쿼리 최적화 등을 통해 빠르고 효율적인 데이터 검색이 가능
  • 데이터 공유 용이
    • 여러 사용자나 애플리케이션이 동일한 데이터를 접근하고 수정할 수 있어 협업 및 데이터 공유가 용이
  • 데이터 무결성 보장
    • 데이터베이스 관리 시스템(DBMS)은 무결성 제약조건을 통해 데이터의 정확성, 일관성을 보장
  • 보안 강화
    • DBMS는 사용자 권한, 인증, 암호화 등의 보안 기능을 제공하여 데이터 접근을 제어하고 보호
  • 백업 및 복구 기능
    • 데이터 손실을 방지하기 위한 백업 및 복구 기능이 제공되어 안전하게 데이터를 보호

단점

  • 시스템 복잡성
    • 설계, 구축 및 관리가 복잡하여 운영을 위해서 기술의 전문성이 필요
  • 전문 인력 필요
    • 관리 및 최적화, 문제 해결 등을 위해 전문가가 필요
  • 운영 비용 증가
    • 관리 및 유지보수, 라이센스 비용 등이 발생하여 운영 비용이 증가
  • 백업 및 복구 시간
    • 대규모 데이터베이스의 백업 및 복구는 시간이 많이 걸리고, 대량의 데이터 처리로 시스템에 부담
  • 성능 문제
    • 데이터베이스가 매우 크거나 복잡해질 경우, 쿼리 성능이 저하되거나 시스템 과부하 야기
  • 보안 위험성
    • 보안이 제대로 구성되지 않으면 해킹, 데이터 유출 등의 관리 위험성

4. 데이터베이스 관리 시스템 (DataBase Management System, DBMS)

데이터의 입력, 수정, 삭제, 조회 등을 제공하는 소프트웨어

5. 데이터베이스의 종류

5-1. 계층형 데이터베이스

부모 자식관계인 트리구조

5-2. 네트워크형 데이터베이스

  • 데이터를 노드로 표현한 모델

5-3. Key-Value(키-값) 데이터베이스

  • NoSQL의 한 종류
  • 키 값을 일대일 대응
  • 데이터 중복이 발생하며 비정형데이터 저장에 유리

5-4. 관계형 데이터베이스

실무에서 가장 많이 사용하는 데이터베이스 종류

관계형 데이터베이스의 구조

  • 테이블(Table) = 릴레이션(Relation) : 행과 열의 값들의 모음, 도메인 특성에 따라 데이터를 논리적으로 그룹화
    • 행(Row), 튜플(Tuple), 레코드(Record) : 관계된 데이터의 묶음, 각 행은 기본키(Primary Key, PK)로 구분 및 식별
    • 열(Column), 필드(Field), 어트리뷰트(Attribute, 속성) : 고유한 이름과 타입이 있다.

※ 도메인(Domain) : 특정 속성(필드, 컬럼)의 허용 값의 타입과 범위

※ 도메인의 주요 특성

  • 유형제한 : 특정 데이터 타입으로 제한(숫자, 문자열, 날짜 등)
  • 범위제한 : 값의 범위를 정의
  • 형식제한 : 값의 형식을 정의(이메일, 주소, 전화번호 등)
  • 일관성보장

※ 도메인의 예시

  • 성별 필드의 도메인 : 남, 여
  • 학년 필드의 도메인 : 1,2,3,4

ERD(Entity Relationship Diagram)

테이블 간의 관계를 표현한 다이어그램

  • 논리모델 : 요구사항을 수집 및 분석해 데이터베이스의 모양을 구성
  • 물리모델 : 논리모델을 기반으로 실제 데이터를 저장할 수 있는 모델을 표현

대표적 DBMS

  • SQL Server
  • Oracle Database
  • DB2
  • PostregSQL
  • MySQL
  • SQLite

6. SQL(Structured Query Language, SQL)이란?

관계형 데이터베이스 관리시스템의 데이터를 관리하는 프로그래밍 언어

※ 구조(Structured) -> 정형화 되어 있다. -> 정형화된 데이터를 질의해서 다룬다.
※ NoSQL은 비정형 데이터를 다룬다.
※ 관계형 데이터베이스(Relational DataBase Management System, RDBMS)

7. SQL 문법의 종류

데이터 정의 언어(DDL), 데이터 조작 언어(DML), 데이터 제어 언어(DCL)

7-1. 데이터 정의 언어(Data Define Language, DDL)

데이터베이스를 정의하는 언어

  • Create : 테이블 생성
  • Alter : 테이블 수정
  • Drop : 디비 또는 테이블 삭제
  • Truncate : 테이블 초기화

7-2. 데이터 조작 언어(Data Manipulation Language, DML)

  • Select : 데이터 조회
  • Insert : 데이터 입력
  • Update : 데이터 수정
  • Delete : 데이터 삭제

7-3. 데이터 제어 언어(Data Control Language, DCL)

  • Grant : 특정 디비 사용자에게 특정 권한 부여
  • Revote : 권한 삭제
  • Commit : 트랜잭션 작업을 완료
  • Rollback : 트랜잭션 작업을 취소 및 이전상태로 복구

8. 데이터베이스 생성 및 삭제

8-1. mysql 접속

mysql -u root -p
Enter password : ******
mysql>

8-2. DDL - create : 데이터베이스 생성

mysql> create database myDatabase;
Query OK, 1 row affected(0.01 SEC)

8-3. 데이터베이스 목록 확인

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| mydatabase         |
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
7 rows in set (0.00 sec)

8-4. 데이터베이스 사용(선택)

mysql> use myDatabase;
Database changed

8-5. 테이블 조회

mysql> show tables;
Empty set (0.00 sec)

8-6. DDL - drop : 데이터베이스 삭제

mysql> drop database myDatabase;
Query OK, 0 rows affected (0.02 sec)

9. 테이블 생성 및 삭제

9-1. 테이블 생성

mysql> create table member (col1 int, col2 VARCHAR(50), col3 DATETIME);
Query OK, 0 rows affected (0.04 sec)

9-2. 테이블 생성 확인

mysql> show tables;
+----------------------+
| Tables_in_mydatabase |
+----------------------+
| member               |
+----------------------+
1 row in set (0.00 sec)

9-3. 테이블 구조 확인

mysql> desc member;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col1  | int         | YES  |     | NULL    |       |
| col2  | varchar(50) | YES  |     | NULL    |       |
| col3  | datetime    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

9-4. 테이블 삭제

mysql> drop table member;
Query OK, 0 rows affected (0.01 sec)

9-5. 테이블 삭제 확인

mysql> show tables;
Empty set (0.00 sec)

10. 데이터 삽입, 조회, 수정, 삭제

10-1. 데이터 삽입

DML - insert(삽입) 기본형식

INSERT INTO 테이블이름 (열1, 열2, ...) VALUES (값1, 값2, ...);
mysql> INSERT INTO member(col1, col2, col3) VALUES (1,"col2 text", "2024-01-01");
Query OK, 1 row affected (0.01 sec)

10-2. 데이터 조회

DML - select(조회) 기본형식

mysql> select [열1, 열2, ... | * ] from 테이블명
※ 열을 콤마로 구분하여 직접 선택하거나 *를 사용하여 전체를 선택
mysql> select * from member;
+------+-----------+---------------------+
| col1 | col2      | col3                |
+------+-----------+---------------------+
|    1 | col2 text | 2024-01-01 00:00:00 |
+------+-----------+---------------------+
1 row in set (0.00 sec)

10-3. 데이터 삭제

DML - delete(삭졔) 기본 형식

DELETE FROM 테이블명 WHERE 조건;
mysql> delete from member where col1 = 1;
Query OK, 1 row affected (0.00 sec)

10-4. 데이터 조회

mysql> select * from member;
Empty set (0.00 sec)
 
반응형

+ Recent posts