본문 바로가기
시작/TIL(Today I Learned)

221222 - MySQL - DB란? / 데이터베이스 기초, DBMS와 RDBMS

by 백씨네 2022. 12. 22.

오늘 내가 배운 것

1. DATABASE (데이터베이스)

  • DBMS
  • RDBMS

2. SQL

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

3. sql 파일 내보내고 불러오기

  • sql - backup

 

출처 : https://www.stechies.com/differences-between-dbms-rdbms/

 

DATABASE (데이터베이스)

데이터베이스(DB: database)는 통합하여 관리되는 데이터의 집합체를 의미한다.

중복된 데이터를 없애고, 자료를 구조화하여, 효율적인 처리를 할 수 있도록 관리한다.
그래서, 여러 업무에 여러 사용자가 데이터 베이스를 사용할 수 있다.

DBMS

  • DataBase Management System
    데이터베이스 관리시스템, SQL을 이용하여 누군가에게 데이터를 허용할지 안 할지를 설정하거나, 데이터를 조작할 수 있다.

RDBMS

  • Relational DataBase Management System
    관계형 데이터베이스 관리시스템, 데이터 베이스 안에서 데이터들 사이의 관계성을 가지는 데이터들을 다루며, 이 데이터를 테이블형태로 저장한다.(테이블 기반의 DBMS)

대표 플랫폼(프로그램)

관계형 데이터베이스 대표적인 플랫폼(프로그램)

  • Oracle
  • Mysql
  • MariaDB
  • PostgreSQL
  • Mssql

비관계형 데이터베이스 대표적인 플랫폼(프로그램)

  • MongoDB
  • xml

SQL

  • Structured Query Language
    DBMS에서 구현된 기능을 실행시키기 위한 특정 언어, 데이터를 보관, 저장, 삭제, 수정을 할 수 있다.

문법

mysql -u root -p 

#사용할 수 있는 접속 상태가 된다.
myspl > [SQL 문법];

명령어 뒤에 세미콜론 필수!!
안쓰면 -> 가 뜨는데 이어서 쓴다는 내용이다.
; 하고 다시 enter 누르면 된다.

 

SQL 문법에서 명령어는 대문자로 사용하는 것이 암묵적인 룰이다.
변수 같은 건 소문자로 쓴다.

SQL 분류

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

1.  데이터 정의어 (DDL)

  • CREATE
  • SHOW : 필드 내용을 보는 것.
  • DROP
  • ALTER
  • USE : 폴더에 들어감
CREATE TABLE store(
    category VARCHAR(50),
    store_name VARCHAR(50),
    price VARCHAR(50),
    tel VARCHAR(50),
    address VARCHAR(50)
);
ALTER TABLE store RENAME TO store2;


SHOW TABLES;
+----------------+
| Tables_in_baek |
+----------------+
| store2         |
+----------------+

ALTER TABLE store2 RENAME TO store;

DESC store;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| category   | varchar(50) | YES  |     | NULL    |       |
| store_name | varchar(50) | YES  |     | NULL    |       |
| price      | varchar(50) | YES  |     | NULL    |       |
| tel        | varchar(50) | YES  |     | NULL    |       |
| address    | varchar(50) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

Field Type

 

숫자형

  • INT : 용량이 적다(4byte) : -21억~+21억

문자형

  • CHAR : 255byte : 고정데이터
  • VARCHAR : 255byte : 가변데이터
  • TEXT : 65535byte
  • 고정과 가변의 차이
    고정 : 성별 - 남자 or 여자
    가변 : 주소

날짜형

  • DATE : 년월일
  • TIME : 시간
  • DATETIME :년월일 시간 (yyyy-mm-dd HH:MM:SS) 8byte
  • TIMESTAMP : 년월일 시간(interger) 4byte
  • YEAR
  • 이진데이터타입*
  • BLOB : 이미지

 

 

key

  • PRIMARY KEY : 중복 입력불가, null 안됨, 테이블당 하나만 넣을 수 있다.
  • UNIQUE : 중복 입력 불가, null 가능

자동생성

  • AUTO_INCREMENT : 1씩 자동 생성
CREATE TABLE user(
    user_id varchar(50) PRIMARY KEY,
    user_pw varchar(50) NOT NULL,
    user_name varchar(50) NOT NULL,
    gender char(4) DEFAULT '남자',
    register_date DATETIME DEFAULT now()
);

객체형으로 나오고 그걸 테이블로 저장한다.

2. 데이터 조작어 (DML)

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

INSERT, SELECT

INSERT INTO [테이블명](필드1, 필드2, ....) values ('string','string'...)
INSERT INTO user(user_id, user_pw, user_name, gender) 
values('web7722', '1234', '백', '남자');

-- 확인 : SELECT
SELECT [필드명] FROM [테이블명]

-- 확인:
DESC user;
+---------------+-------------+------+-----+-------------------+-------------------+
| Field         | Type        | Null | Key | Default           | Extra             |
+---------------+-------------+------+-----+-------------------+-------------------+
| user_id       | varchar(50) | NO   | PRI | NULL              |                   |
| user_pw       | varchar(50) | NO   |     | NULL              |                   |
| user_name     | varchar(50) | NO   |     | NULL              |                   |
| gender        | char(4)     | YES  |     | 남자               |                   |
| register_date | datetime    | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+---------------+-------------+------+-----+-------------------+-------------------+
5 rows in set (0.00 sec)

-- 선택한것이 4개여서 4개만 보이는 것이고 다 보기 위해선 필드값을 다 적으면 된다.

SELECT user_id, user_pw, user_name, gender FROM user;

+---------+---------+-----------+--------+
| user_id | user_pw | user_name | gender |
+---------+---------+-----------+--------+
| web7722 | 1234    | 백        | 남자     |
+---------+---------+-----------+--------+


SELECT user_id, user_pw, user_name, gender, register_date FROM user;

+---------+---------+-----------+--------+---------------------+
| user_id | user_pw | user_name | gender | register_date       |
+---------+---------+-----------+--------+---------------------+
| web7722 | 1234    | 백         | 남자   | 2022-12-22 11:20:42  |
+---------+---------+-----------+--------+---------------------+

-- 중복값 넣어보기
INSERT INTO user(user_id, user_pw, user_name, gender) 
    -> values('web7722', '1234', '백', '남자');

ERROR 1062 (23000): Duplicate entry 'web7722' for key 'user.PRIMARY'


-- 모든 내용을 보고 싶을 때 
SELECT * FROM user;

+---------+---------+-----------+--------+---------------------+
| user_id | user_pw | user_name | gender | register_date       |
+---------+---------+-----------+--------+---------------------+
| web7722 | 1234    | 백         | 남자   | 2022-12-22 11:20:42 |
+---------+---------+-----------+--------+---------------------+

INSERT INTO user(user_id, user_pw, user_name, gender)
values ('admin', '1234', '관리자', '남자');

SELECT * FROM user;
+---------+---------+-----------+--------+---------------------+
| user_id | user_pw | user_name | gender | register_date       |
+---------+---------+-----------+--------+---------------------+
| admin   | 1234    | 관리자     | 남자     | 2022-12-22 11:31:50 |
| web7722 | 1234    | 백        | 남자     | 2022-12-22 11:20:42 |
+---------+---------+-----------+--------+---------------------+

where 절

SELECT * FROM user WHERE user_id='admin';

UPDATE

UPDATE user SET gender='여자' WHERE user_id='admin';
SELECT * FROM user WHERE user_id='admin';

UPDATE user SET user_pw='0000', user_name='슈퍼관리자', gender='남자' WHERE user_id='admin';

DELETE

DELETE FROM user WHERE user_id='admin';
SELECT * FROM user;

3. 데이터 제어어 (DCL)

  • GRANT
  • REVOKE

 

 

연습

데이터베이스에 데이터 저장하기

1. 게시판 테이블 만들기

CREATE TABLE board(
    idx INT(11) AUTO_INCREMENT PRIMARY KEY,
    subject VARCHAR(150) NOT NULL,
    content TEXT NULL,
    writer VARCHAR(50) NOT NULL,
    registerDate DATETIME NOT NULL DEFAULT now(),
    hit INT(11) default 0 
);

2. row 5개 만들기

INSERT INTO board(subject,content,writer) values('가나다', '1234', '관리자1');
INSERT INTO board(subject,content,writer) values('라마바', '1234', '관리자2');
INSERT INTO board(subject,content,writer) values('사아자', '1234', '관리자3');
INSERT INTO board(subject,content,writer) values('차카타', '1234', '관리자4');
INSERT INTO board(subject,content,writer) values('파하가', '1234', '관리자5');

 

+-----+-----------+---------+------------+---------------------+------+
| idx | subject   | content | writer     | registerDate        | hit  |
+-----+-----------+---------+------------+---------------------+------+
|   1 | 가나다      | 1234    | 관리자1     | 2022-12-22 12:03:31 |    0 |
|   2 | 라마바      | 1234    | 관리자2     | 2022-12-22 12:03:31 |    0 |
|   3 | 사아자      | 1234    | 관리자3     | 2022-12-22 12:03:31 |    0 |
|   4 | 차카타      | 1234    | 관리자4     | 2022-12-22 12:03:31 |    0 |
|   5 | 파하가      | 1234    | 관리자5     | 2022-12-22 12:03:34 |    0 |
+-----+-----------+---------+------------+---------------------+------+

 

 

 

 SQL파일 백업 및 불러오기

 1. MySQL 종료상태 (mysql -> zsh)


exit

 

2. .sql 파일 만들기 (zsh)

mysqldump -u[계정명] -p [데이터베이스명] > backup.sql
Enter password: [sql비밀번호]
mysqldump -uroot -p baek > backup.sql
Enter password: [sql비밀번호]

 

3. MySQL 접속 (mysql)

mysql -uroot -p 
Enter password: [sql비밀번호]

 

 

4. D/B 생성

CREATE DATABASE baek2

 

 

5. .sql파일 불러오고 확인하기

SOURCE ./backup.sql

SELECT * FROM board;
+-----+-----------+---------+------------+---------------------+------+
| idx | subject   | content | writer     | registerDate        | hit  |
+-----+-----------+---------+------------+---------------------+------+
|   1 | 가나다     | 1234    | 관리자1      | 2022-12-22 12:03:31 |    0 |
|   2 | 라마바     | 1234    | 관리자2      | 2022-12-22 12:03:31 |    0 |
|   3 | 사아자     | 1234    | 관리자3      | 2022-12-22 12:03:31 |    0 |
|   4 | 차카타     | 1234    | 관리자4      | 2022-12-22 12:03:31 |    0 |
|   5 | 파하가     | 1234    | 관리자5      | 2022-12-22 12:03:34 |    0 |
+-----+-----------+---------+------------+---------------------+------+
5 rows in set (0.00 sec)

종료하기 전에 있었던 내용을 확인할 수 있다.

 


 

댓글