DBMS의 정의
- DBMS : DataBase Management System
- 종류
관계형 DataBase : MySQL, MariaDB, Oracle, Postgres
NoSQL : MongoDB, Redis
Redis는 로그인 시 인증에 사용되어 MySQL+Redis, MariaDB+Redis, MongoDB+Redis 혼합해서 사용
- 관계형 데이터베이스(RDB)
서로 관계를 갖는 데이터들의 집합
데이터, 행, 열 등의 구조로 데이터가 구조화
- MariaDB
MySQL의 포크, MySQL의 기본적인 특성 및 구조를 그대로 유지 + 추가 기능
완전한 오픈소스 -> 지속적인 발전 가능성, 사용자 입장에서 무료
뛰어난 성능 및 최적화
- 관련 개념 정리
DBMS : DB를 관리하는 프로그램 ex) mariaDB
스키마 = 데이터베이스
스키마와 테이블은 1:N 관계
SQL
- DBMS에서 사용하는 프로그래밍 언어
- CRUD
Create(생성), Read(조회), Update(수정), Delete(삭제)의 약어
- SQL 구문
1. DDL(Data Definition Language)
데이터베이스나 테이블, 뷰 등을 생성, 삭제하거나 구조를 변경
CREATE, ALTER, DROP
2. DML(Data Manipulaiont Language)
데이터베이스에 저장된 데이터를 처리하거나 조회
INSERT, UPDATE, DELETE, SELECT
3. DCL(Data Control Language)
사용자 권한 부여
GRANT, REVOKE
테이블 관련 용어
(1) 열=필드=속성
컬럼의 구체적인 데이터 하나하나의 개별 데이터 항목을 의미
(2) 행=튜플=레코드
(3) 값=데이터
(4) 키
행의 식별자로 이용되는 열
기본키(Primary Key) : 테이블에 저장된 레코드를 고유하게 식별하는 키
외래키(Foreign Key) : 두 테이블을 서로 연결하는데 사용되는 키
- 인덱스
조회 성능을 높이기 위한 별도의 페이지
제약조건 정보조회와 인덱스 조회는 상당수 일치
제약조건이 생기면 주요 키들에 대한 인덱스가 생성된다
INDEX가 빠른 이유 : B-Tree 기반이기 때문에
mariaDB 및 workbench 설치
https://dev.mysql.com/downloads/workbench/
mariadb 환경변수 설정하는 방법
(1) mairadb가 설치된 bin 파일 경로 찾기
C:\Program Files\MariaDB 11.3\bin
(2) 왼쪽 하단 돋보기 [찾기]에 "시스템 환경 변수 편집" 검색
(3) "환경 변수" -> 하단 시스템 변수(S)에서 Path 누르고 "편집"
(4) "새로 만들기" -> mairadb가 설치된 bin 파일 경로 붙여넣기 -> "확인"
환경변수 설정해주는 이유 !!
mariadb/bin 파일 안에 실행파일이 있기 때문에,
원래는 mariadb/bin으로 이동해서 접속(mariadb -u root -p)해야 하는데
환경변수 설정을 통해 실행파일을 아무데서나 접근 가능하게 golbal화 시켜주는 것
그래서 환경변수 설정 이후 그냥 cmd 켜서 바로 mariadb에 접속할 수 있음
Store in Vault ... 눌러서 Password를 작성해줘야 오류없이 사용할 수 있다
- cmd mariadb 사용법
mariadb -u root -p로 실행
show databases;
use board;
다양한 SQL 명령어 실행
exit
- workbench 사용법
한 줄 실행 : Ctrl + Enter
전체 실행 : Ctrl + Shift + Enter OR 번개 모양 누르기
제약조건으로 실행 안되면 mariadb -> Edit -> Preferences -> SQL Editer -> 하단 Safe Updates (rejects UPDATEs and DELETEs with no restrictions) 체크 해제
<DDL 기본 명령어>
(+) ALTER 명령어 정리
<DDL 기본 명령어 실습과제>
1. post 테이블의 contents 컬럼 글자수 3000으로 변경
ALTER TABLE post MODIFY COLUMN contents VARCHAR(3000);
2. author 테이블에 address 컬럼 varchar 255로 추가
ALTER TABLE author ADD COLUMN address VARCHAR(255);
3. post 테이블 생성문 조회 -> post 테이블 삭제 -> post 테이블 다시 생성
SHOW CREATE TABLE post;
DROP TABLE post;
CREATE TABLE `post` (
`id` int(11) NOT NULL,
`title` varchar(255) DEFAULT NULL,
`contents` varchar(3000) DEFAULT NULL,
`author_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `author_id` (`author_id`),
CONSTRAINT `post_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
<DML 기본 명령어>
1. INSERT
테이블에 새로운 레코드를 추가
INSERT INTO 테이블이름(필드이름1, 필드이름2, ... ) VALUES(데이터값1, 데이터값2, ...)
ex) INSERT INTO author(id, name, email) VALUES(1, 'kim', 'abc@naver.com');
NOT NULL 제약조건이 걸린 필드는 무조건 추가해줘야 함. 나머지는 상관없음
<INSERT 명령어 실습과제>
2. UPDATE
테이블 레코드의 내용을 수정
UPDATE 테이블이름 SET 필드이름1=값1, 필드이름2=값2, ...
WHERE 필드이름=값
만약 WHERE 절을 생략하면, 해당 테이블의 모든 레코드값이 위 설정대로 수정되므로 유의
ex) UPDATE author SET email='update@naver.com' WHERE id=1;
3. DELETE
DELETE FROM 테이블이름 WHERE 필드이름=데이터값
WHERE 절을 생략하면, 해당 테이블에 저장된 모든 데이터가 삭제
ex) DELETE FROM author WHERE author_id=6;
<UPDATE, DELETE 명령어 실습과제>
DELETE vs TRUNCATE vs DROP
DELETE는 행 일부 또는 전체 데이터를 지우고,
TRUNCATE는 행 전체 데이터 뿐만 아니라 행이 저장되어있던 공간과 인덱스도 삭제하며,
DROP은 인덱스, 행 데이터 뿐만 아니라 테이블 전체를 삭제합니다.
DELETE는 삭제하면서 백업본, 로그 등을 만들기 때문에 DROP, TRUNCATE에 비해 느리다
4. SELECT
SELECT * FROM 테이블이름 [WHERE조건]
ex) SELECT * FROM author ;
SELECT name, email FROM author WHERE id=1;
SELECT * FROM author WHERE id>1;
SELECT * FROM author WHERE id>1 AND name="kim";
-중복제거(DISTINCT)
SELECT DISTINCT name FROM author;
-정렬
ORDER BY절 사용
기본 정렬 : ASC, 생략시 ASC적용
먼저 쓴 컬럼 우선정렬
select * from author order by name, email desc;
-LIMIT
결과 값의 개수 지정
select * from author order by id desc limit 2;
-별칭(ALIAS)을 이용한 처리
테이블과 필드에 임시로 별칭을 부여하고, 해당 별칭을 SELECT 문에서 사용
SELECT 필드이름 AS 별칭 FROM 테이블 이름;
SELECT 필드이름 FROM 테이블 이름 AS 별칭 ;
<DDL, DML 전체 실습과제>
drop database;
create database board;
1. 아래 스키마를 보고 author, post 테이블 재생성 (FK는 default인 restrict설정으로 둠)
-author 테이블 생성
create table author(id int primary key, name varchar(100) NOT NULL , email varchar(255), password varchar(255), role varchar(50), address varchar(255))
-post 테이블 생성
create table post(id int primary key, title varchar(255), contents varchar(3000), author_id int, foreign key(author_id) references author(id))
2.
(1) 게시판 회원은 총 5명이 되도록 만들고, 게시판에 실명으로 글이 쓰여진 게스글은 총 3건, 익명으로 글이 쓰여진 글은 총 2건이 있도록 데이터 insert
INSERT INTO author(id, name, email, password, role, address) VALUES(1, 'aaa', 'aaa@naver.com', 'aaa', 'manager', 'a동 a호');
INSERT INTO author(id, name, email, password, role, address) VALUES(2, 'bbb', 'bbb@naver.com', 'bbb', 'manager', 'b동 b호');
INSERT INTO author(id, name, email, password, role, address) VALUES(3, 'ccc', 'ccc@naver.com', 'ccc', 'user', 'c동 c호');
INSERT INTO author(id, name, email, password, role, address) VALUES(4, 'ddd', 'ddd@naver.com', 'ddd', 'user', 'd동 d호');
INSERT INTO author(id, name, email, password, role, address) VALUES(5, 'eee', 'eee@naver.com', 'eee', 'user', 'e동 e호');
INSERT INTO post(id, title, contents, author_id) VALUES(1, '귤 정보', '건강', 1);
INSERT INTO post (id, title, contents, author_id) VALUES(2, '비타민 정보', '건강', 2);
INSERT INTO post (id, title, contents) VALUES(3, '상체운동 정보', '운동');
INSERT INTO post (id, title, contents) VALUES(4, '하체운동 정보', '운동');
INSERT INTO post (id, title, contents, author_id) VALUES(5, '우유 정보', '건강', 3);
(2) 게시판의 회원을 모두 delete하되, 기존에 posting된 글은 삭제되지 않고 남아있도록 하여라
UPDATE post SET author_id=null WHERE author_id IS NOT NULL;
DELETE FROM author;
(3) post의 글을 3개만 조회하되, title을 기준으로 오름차순하고 만약 제목이 같은 경우 contents로 내림차순이 되도록 조회하여라.
SELECT * FROM post ORDER BY title, contents desc LIMIT 3;
'Back-End 공부 > Database' 카테고리의 다른 글
[Database] INDEX와 VIEW 생성, 조회, 삭제 방법, 사용자 관리 방법 (0) | 2023.11.22 |
---|---|
[Database] 테이블 JOIN 종류와 사용 방법 (1) | 2023.11.21 |
[Database] 트랜잭션 정의와 특징, TCL(COMMIT, ROLLBACK) (0) | 2023.11.21 |
[Database] 제약조건 및 흐름제어 (1) | 2023.11.20 |
[Database] 데이터 타입(숫자, 문자)와 연산자, 검색 패턴 (1) | 2023.11.17 |