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 |