2024.03.11

 

240308 MariaDB_Basic.pdf
0.92MB
240308 SQL.txt
0.00MB

 

https://weftnwarp.kr/site-it/archives/dnf-%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B8%B0%EB%B3%B8-%EA%B4%80%EB%A6%AC-%EB%AA%85%EB%A0%B9-1-%ED%8C%A8%ED%82%A4%EC%A7%80-%EC%84%A4%EC%B9%98install-%EC%A0%9C%EA%B1%B0remove-%EC%9E%AC%EC%84%A4/

https://gguno.com/?p=23

 


 

Database

 

데이터베이스 이해 

Database

체계화된 데이터의 모임

구조적으로 데이터를 저장하는 공간 (파일/파일모음)

데이터를 효율적으로 처리, 관리하기 위해 도입

테이블 형태로 데이터를 관리

DBMS(=DataBase Management System)을 이용하여 DB를 생성하고 제어함 

 

DBMS(DataBase Management System) 

다수의 컴퓨터, 사용자들이 DB안에 데이터를 기록하거나 사용할 수 있도록 해주는 프로그램 

사용자들은 실제 데이터의 저장위치를 몰라도 언제든지 데이터를 사용할 수 있음 

데이터 처리에 있어 무결성과 보안성을 제공함 

↳ 무결성: 위변조가 됐는지 확인하기 위해 Hash 알고리즘 사용 

  • 관계형 DBMS => Relational DBMS : My-SQL, MariaDB, MS-SQL, ORACLE ..... 빅데이터에서 많이 사용 
  • 비관계형 DBMS => Non SQL(No SQL) 또는 Non Relational DBMS : MongoDB, Redis, HBase, Elasticsearch…

 

계층형 데이터베이스

트리 구조의 데이터 모델 

비슷한 유형의 데이터를 분류하여 관리하는 데이터 베이스 

Ex. Linux에서 디렉터리를 통해 비슷한 유형의 파일을 분류하고 관리 

 

네트워크 데이터베이스

분류된 비슷한 유형의 데이터를 별도의 공간에서 참조하여 데이터를 수정 및 사용할 수 있도록 데이터를 관리하는 데이터 베이스.

Ex. Linux에서 디렉터리를 통해 비슷한 유형의 파일을 분류하고 관리하는것 + 링크파일

> 링크파일 : 원본파일의 데이터를 가지고 있는것이 아니라 원본 파일의 데이터를 참조하여 수정 및 사용할 수 있게하는 파일 

 

관계형 데이터베이스

테이블이라 불리는 최소 단위로 구성된 데이터 모델

모든 데이터는 테이블에 저장 (엑셀 시트 생각하기) 

Ex. 쇼핑몰에서 회원정보 및 주문정보, 재고정보/대학교에서 학생정보 및 교과목 정보, 성적 정보 등

DBMS 종류

  • MariaDB, MSSQL, Oracle, MYSQL, DB2, SQLite, Cubrid, 등

 

비관계형 데이터베이스

관계형 데이터베이스와 달리 유연한 데이터 모델을 이용한다.

데이터를 Document(문서형태의 자료구조) 단위로 json형식(값 이름=값)으로 많은 양의 데이터를 저장하고 관리하는 데이터 베이스 Non-Relational Operational Database SQL 

Ex. 빅데이터 분야 → 카카오 택시 등

    - 빅데이터 : 많은 양의 데이터를 수집하여 특정목적을 위해 의미 있는 데이터를 추출하는 기술

 

DBMS 종류

  • Redis, Cassandra, HBase, MongoDB

 

 

관계형 데이터베이스 구조

이름 나이 전화번호 이거는 행이 아니라 열 name 이다 

 

Table (= Relation)

데이터의 세부 목적에 맞게 구조적 목록으로 묶어놓은 영역

테이블의 이름은 고유해야 함

↳ 윈도우로 따지면 폴더의 이름은 고유해야한다. 그러니까 A데이터베이스에는 같은 이름을 가진 테이블은 불가능

A, B 데이터베이스에 a.txt라는 동일이름인 테이블은 가능. 왜냐면 A, B 데이터베이스는 서로 다르니까  

 

Columns (= Fields = Attribute = 열)

특정한 단순 자료 형의 일련의 데이터 값과 테이블에서의 각 열

 

Rows (= Record = Tuple = 행)

테이블에서 한 객체의 대한 전체 정보

 

Field

Column 의 대용으로 동일한 의미로 사용되지만 한 행과 한 열의 교차 지점에 있는 단일 값을 특별히 지칭하는 용어

↳ 한 칸의 내용이라 생각해라?

 

 

 

DBMS 설치하기 - MariaDB

MySQL

오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)

다중 스레드, 다중 사용자 형식의 구조 질의어 형식의 데이터베이스 관리 시스템

이중 라이선스 적용

  • GPL(General Public License) - GNU 일반 공중 사용 허가서
    > 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스
  • GPL 이외의 라이선스로 적용시키려는 경우 전통적인 지적재산권 라이선스 적용

썬 마이크로 시스템즈에 인수되었으나, 썬 마이크로 시스템즈가 오라클에 인수되며 같이 넘어감

5.x 버전 출시 이후 Oracle사에서 인수하여 개발하고 있으며, 상용버전과 무료버전이 존재

 

MariaDB 

MySQL 책임개발자가 Oracle의 MariaDB 인수에 반발하여 개발

표준 SQL 호환성이 좋으나, 오픈소스인 관계로 기술지원이 어려운 단점이 있음 

𝒙.𝒙.𝒙 MariaDB 버전이 있다면 가운데 번호가 짝수면 안정된 버전이라 생각해라

예를들어 5.6.7이면 가운데 숫자가 6이므로 안정된 버전이다 

 

 

 

MariaDB 설치 

[root@localhost ~]# dnf -y install mariadb-server                 
완료되었습니다!

 

MariaDB 실행 

[root@localhost ~]# systemctl restart mariadb

 

MariaDB 작동 확인 

[root@localhost ~]# netstat -antup | grep mariadb
tcp6       0      0 :::3306                 :::*                    LISTEN      3608/mariadbd       

 

MariaDB 접속 

[root@localhost ~]# mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.22-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

 

Databases 보여줘 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.011 sec)

MariaDB [(none)]> 

# 

 

 

 

 

 

SQL (Structure Query Language)

SQL (Structured Query Language)

구조화된 질의 언어

DBMS를 관리하고 제어하기 위해 사용하는 인터페이스 또는 언어

데이터베이스로부터 정보를 얻거나 갱신하기 위한 표준 대화식 프로그래밍 언어

DBMS에 따라 사용되는 SQL 문법이 다름 

 

 

SQL 문법 종류 

기본 SQL 문법 종류

데이터 정의어(DDL, Data Definition Language)

데이터베이스의 구조를 정의하거나 변경, 삭제하기 위해 사용하는 언어

주로 DB관리자 또는 설계자가 사용 

CREATE(개체 생성. 데이터생성이라 생각), ALTER(개체 수정), DROP(개체 삭제), TRUNCATE(개체 초기화)

데이터는 Delete로 지움 테이블은 Drop 

 

데이터 조작어(DML, Data Manipulation Language)

Data를 조작하기 위해 사용하는 언어 (실 Data를 생성하기 전에 데이터 베이스 안에 테이블 안에 Data) 

실 Data의 삽입, 수정, 삭제, 조회 등의 동작을 제어

Data를 이용하려는 사용자와 시스템간의 인터페이스를 직접적으로 제공하는 언어

가장 많이 사용됨 (공격 시에도 가장 많이 사용)

INSERT(데이터 생성), UPDATE(데이터 수정), DELETE(데이터 삭제), SELECT(데이터 조회)

 

데이터 제어어(DCL, Data Control Language)

DB에 대한 보안, 무결성, 복구등 DBMS를 제어하기 위한 언어

GRANT(권한할당), REVOKE(권한해제), COMMIT(실행), ROLLBACK(복구) 

 

 

 

SQL 기본 문법

- 메타문자 

 

- 연산자 

 

 

 

SQL 기본 명령어 

기본 명령어

use 명령어

데이터베이스 선택(지정) 명령어

명령어 끝에 세미콜론(;)을 안 적어도 됨

MariaDB> use <DB명>

 

하나의 명령어 끝에는 반드시 세미콜론(;) 으로 끝나야 함(use 명령어는 예외)

 

show 명령어

데이터베이스나 테이블 목록 조회

MariaDB> show databases;

MariaDB> show tables;

     > 테이블의 목록을 확인하기 위해서는 먼저 데이터베이스가 선택되어 있어야 함

 

※ 기본 Database 

-. MariaDB 설치 시 기본적으로 만들어져 있는 Database

┏ information_schema : DBMS에 있는 DB 와 Table 정보

┣ mysql : 계정 및 권한 관련 정보

┗ performance_Schema : 성능 관련 정보

 

 

 

 

 

DDL Database Definition Language

데이터 정의어(DDL, Data Definition Language)

데이터베이스의 구조를 정의하거나 변경, 삭제하기 위해 사용하는 언어

CREATE(개체 생성), ALTER(개체 수정), DROP(개체 삭제), TRUNCATE(개체 초기화)

 

Database 생성

  • MariaDB> create database ;
  • 확인
    • MariaDB> show databases;

 

Database 삭제

  • MariaDB> drop database ;
  • 확인
    • MariaDB> show databases;

 

 

Database 생성 및 확인 

MariaDB [(none)]> create database test01_db;
Query OK, 1 row affected (0.002 sec)

 

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test01_db          |
+--------------------+
4 rows in set (0.000 sec)

 

 

Database 삭제 

MariaDB [(none)]> drop database test01_db;
Query OK, 0 rows affected (0.020 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.000 sec)

# 

 

 

 

데이터 타입

저장될 데이터의 형태

원본이미지 

프로그램 개발에선 boolean할 때는 필요하지만 데이터베이스엔 놉 

varchar: Variable Character 

 

2³² ≒ 약 42억 9천

중간에 100억을 char로 타입을 했다면 들어갈 수 없다 Buffer Overflow 

 

Table 생성시

i. 열이름 지정 

ii. 데이터 타입 지정 

iii. 제약조건 

학생정보 Table
이름 TEL 주소  나이  학점
char int   int double

int로 주면 학점이 4.3이라 입력해도 4라는 값이 나온다
수정하고 싶을 땐 ALTER

 

 

 

 

Table 생성 

도안

 

MariaDB [(none)]> create database kor_db;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kor_db             |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

MariaDB [(none)]> use kor_db;
Database changed
MariaDB [kor_db]> show tables;
Empty set (0.000 sec)

MariaDB [kor_db]> create table kor_member(
    -> no int auto_increment not null primary key ,
    -> name char(20) ,
    -> id varchar(20) unique ,
    -> password varchar(50) default "1234" ,
    -> reg_date datetime not null );
Query OK, 0 rows affected (0.019 sec)


MariaDB [kor_db]> show tables;

 

 

MariaDB [kor_db]> desc kor_member;

 

# 

 

 

 

제약 조건

데이터의 무결성을 지키기 위해 제한된 조건

테이블 및 열(컬럼) 레벨에서 적용가능하며, 테이블의 생성이나 구조 변경 시에도 적용 할 수 있음

적절한 제약조건을 골라서 사용

UNIQUE: 회원가입할 때 ID 중복 체크 하는 것처럼 같은 값을 넣으면 안됨. 무결성 보장을 위해 

PRIMARY KEY: UNIQUE 중복되어서도 안되고 NOT NULL 비어있어도 안된다 

 

 

 

Table 수정(구조 변경)

MariaDB> alter table <테이블명> <옵션 값 ... > ;

 

[ACTION]

 

Table 수정(구조 변경) - add

Column 추가

MariaDB> alter table <테이블명> add <컬럼명> <데이터타입> [옵션] [제약조건] [위치옵션] ;

위치 옵션

first : 가장 위에 추가

after <컬럼명> : 해당 컬럼 뒤에 추가

위의 도안을 기준으로 after password 라면 password 뒤에 컬럼이 추가된다 

MariaDB [kor_db]> alter table kor_member add nickname varchar(30) unique;
Query OK, 0 rows affected (0.022 sec)
Records: 0  Duplicates: 0  Warnings: 0


MariaDB [kor_db]> desc kor_member;

MariaDB [kor_db]> alter table kor_member add age int first;

Query OK, 0 rows affected (0.005 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [kor_db]> desc kor_member;

 

MariaDB [kor_db]> alter table kor_member add memo text after password;
Query OK, 0 rows affected (0.004 sec)
Records: 0  Duplicates: 0  Warnings: 0


MariaDB [kor_db]> desc kor_member;

# 

 

 

Table의 Column 삭제 - drop

Column 삭제

MariaDB> alter table <테이블명> drop <컬럼명>; 

MariaDB [kor_db]> alter table kor_member drop age;
Query OK, 0 rows affected (0.004 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [kor_db]> desc kor_member;

# 

 

 

Table 수정 - modify

column 수정

MariaDB> alter table <테이블명> modify <컬럼명> <데이터타입> [옵션] [제약조건] ; 

MariaDB [kor_db]> alter table kor_member modify password varchar(50) default "qwer1234";
Query OK, 0 rows affected (0.002 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [kor_db]> desc kor_member;

# 

 

 

Table 수정 - change

column 변경

MariaDB> alter table <테이블명> change <기존컬럼명> <새컬럼명> <데이터타입> [옵션] [제약조건] ; 

MariaDB [kor_db]> alter table kor_member change memo address varchar(100);
Query OK, 0 rows affected (0.013 sec)              
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [kor_db]> desc kor_member;

# 

 

 

Table 수정(구조 변경) - rename

테이블 이름 변경

MariaDB> alter table <기존 테이블명> rename <변경할 테이블명> ;

MariaDB [kor_db]> show tables; 일단 확인 

 

MariaDB [kor_db]> alter table kor_member rename k_mem;
Query OK, 0 rows affected (0.005 sec)

MariaDB [kor_db]> show tables;

# 

 

 

Table 초기화

테이블 내 데이터를 모두 삭제하고 설정을 초기화

MariaDB> truncate <테이블명>;

 

 

TRUNCATE / DROP / DELETE 차이점

Truncate

해당 테이블의 데이터 모두 삭제되지만 테이블 자체가 지워지는 것은 아님

 

Drop 

테이블 자체가 지워짐

 

Delete DML 

특정 데이터만 지울 수 있지만, truncate는 안 됨 그래서 데이터삭제는 주로 delete 사용 

데이터 삭제 

Delete 명령어로 데이터를 삭제할 때엔 무조건 where 라는 조건을 주고 삭제한다 

 

Table 삭제

MariaDB> drop table <테이블명>;

 

삭제 확인

MariaDB> show tables;

MariaDB [kor_db]> drop table k_mem;
Query OK, 0 rows affected (0.003 sec)

MariaDB [kor_db]> show tables;
Empty set (0.001 sec)

# 

 

 

 

'☁︎클라우드 > 일자별' 카테고리의 다른 글

240312 DAY 44  (0) 2024.03.13
240311 DAY 43  (0) 2024.03.11
240307 DAY 41  (0) 2024.03.11
240305 DAY 39  (0) 2024.03.05
240304 DAY 38  (0) 2024.03.04