개발자교육

24_07_05 오늘의 수업내용

regnator 2024. 7. 5. 10:00
728x90
반응형

데이터베이스 개요

데이터베이스의 정의

  • 데이터베이스: 데이터 집합, 데이터의 저장공간
  • 정의: 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 구조적으로 통합해 놓은 것

데이터, 정보, 지식

  • 데이터: 관찰의 결과로 나타난 정량적 혹은 정성적인 실제 값 (예: 현재기온 35도)
  • 정보: 데이터에 의미를 부여한 것 (예: 폭염주의)
  • 지식: 사물이나 현상에 대한 이해 (예: 폭염 대비 온열질환)

데이터베이스의 개념

  • 통합된 데이터 (Integrated Data): 여러 곳에 사용하던 데이터를 통합하여 하나로 저장한 데이터 (데이터 중복 최소화)
  • 저장된 데이터 (Stored Data): 컴퓨터가 접근할 수 있는 저장 매체(디스크)에 저장된 자료
  • 운영 데이터 (Operational Data): 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 반드시 필요한 자료 (임시 데이터는 제외)
  • 공용 데이터 (Shared Data): 개인 또는 특정 업무가 아닌 공동으로 사용하는 데이터 (여러 응용 시스템들이 공동 소유 및 유지)
데이터베이스 개념도

데이터베이스의 특성

  • 실시간 접근성 (Real-Time Accessibility): 수시적이고 비정형적인 질의(조회)에 실시간 처리로 응답 가능
  • 계속적인 변화 (Continuous Change): 데이터 삽입, 수정, 삭제 등의 작업으로 항상 최신의 데이터 유지
  • 동시 공용 (Concurrent Sharing): 여러 사용자나 프로그램이 동시에 같은 데이터를 이용 가능
  • 내용에 의한 참조 (Reference by Content): 데이터 레코드의 주소나 위치가 아닌 데이터 내용으로 참조

데이터베이스의 키워드

  • 스키마 (Schema): 데이터베이스, 테이블의 구조와 속성에 대한 정보
  • 테이블 (Table/Relation): 특정한 형태의 데이터로 이루어진 구조화(행과 열)된 목록
  • 열 (Column, Attribute): 저장하려는 데이터를 대표하는 이름과 특성 (모든 테이블의 한 개 이상의 열로 구성)
  • 행 (Row, Tuple, Record): 테이블에 삽입되는 단일 구조 데이터 항목
  • 식별자 (Key): 하나의 테이블에 구성되어 있는 여러 속성 중 테이블을 대표할 수 있는 속성
  • 도메인 (Domain): 각 속성이 가질 수 있는 값의 범위 (예: 성적 도메인 0~100, 금액 도메인 등)
  • 차수 (Degree): 테이블이 가지고 있는 열(Column)의 수
  • 카디널리티 (Cardinality): 테이블이 가지고 있는 행(Row, Tuple)의 수

데이터베이스 관리시스템 (DBMS: DataBase Management System)

  • DBMS: 데이터베이스를 관리하며 응용프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공하는 소프트웨어
  • 관계형 DBMS: 관계형(Relational) 데이터 모델 개념을 바탕으로 데이터를 저장 관리하는 데이터베이스 (RDBMS)
    • 대표 DBMS: Oracle, MySQL, MS SQL Server, PostgreSQL, MariaDB

cf)nosql : 관계형 데이터 모델과 반대로 관계를 부정한다는 뜻이다. 중복이 되던 아니던 필요없음

 

서로 다른테이블에서 연결점을 찾아서 그것을 기반으로 내용을 작성

 

DBMS 데이터 구성

  • 클라이언트 (Client): 외부에서 데이터를 요청하는 쪽 (데이터 요청자)
  • 서버 (Server): 데이터를 소유하고 있는 쪽 (데이터 제공자)

 

 

DBMS 필수 기능

  • 정의 기능 (Data Definition): 데이터베이스에 저장될 데이터의 형(Type)과 구조에 대한 정의, 이용방식, 제약 조건 등을 명시하는 기능
  • 조작 기능 (Data Manipulation): 데이터 검색, 삽입, 갱신, 삭제 등을 체계적으로 처리하기 위해 사용자와 데이터베이스 사이의 인터페이스 수단을 제공하는 기능
  • 제어 기능 (Data Control): 데이터의 무결성을 유지하고, 정당한 사용자가 허가된 데이터만 접근할 수 있도록 보안을 유지하며, 병행제어(Concurrency Control)를 통해 여러 사용자가 동시에 데이터를 처리할 때 항상 정확성을 유지하도록 하는 기능

SQL (Structured Query Language)

관계형 데이터베이스 관리시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수목적의 프로그래밍 언어

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

  • 데이터베이스 객체(테이블, 뷰, 스키마 등)의 구조를 정의하고 관리하는 명령어

CREATE: 데이터베이스 오브젝트 생성

CREATE [데이터베이스객체종류] [객체의이름] [옵션];
-- 예시: CREATE DATABASE KSMARTDB DEFAULT CHARACTER SET UTF8;

 

ALTER: 데이터베이스 오브젝트 변경

ALTER [데이터베이스객체종류] [객체의이름] [옵션];
-- 예시: ALTER TABLE MEMBERS CHANGE COLUMN m_name mbr_nm varchar(20);

 

DROP: 데이터베이스 오브젝트 삭제 (완전 삭제)

DROP [데이터베이스객체종류] [객체의이름];
-- 예시: DROP DATABASE KSMARTDB;

 

TRUNCATE: 데이터베이스 오브젝트 내용 삭제 (구조를 임시로 저장해놓고 다시 생성)

TRUNCATE [데이터베이스객체종류] [객체의이름];
-- 예시: TRUNCATE TABLE MEMBERS;

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

  • 데이터베이스 테이블에 데이터를 조회, 삽입, 수정, 삭제하는데 사용되는 명령어

SELECT: 테이블의 내용을 조회

SELECT [조회할 컬럼] FROM [테이블] WHERE [조건] GROUP BY [그룹] HAVING [조건];
-- 예시: SELECT * FROM MEMBERS WHERE mbr_id = 'id001';

INSERT: 테이블에 신규 데이터 삽입

INSERT INTO [테이블] (컬럼1, ...컬럼n) VALUES (데이터1, ....데이터n);
-- 예시: INSERT INTO MEMBERS (mbr_id, mbr_nm) VALUES('id001', '홍01');

UPDATE: 테이블의 데이터 수정

UPDATE [테이블] SET [컬럼=수정값] WHERE [조건];
-- 예시: UPDATE MEMBERS SET mbr_nm = '홍1' WHERE mbr_id = 'id001';

DELETE: 테이블의 데이터 삭제

DELETE FROM [테이블] WHERE [조건];
-- 예시: DELETE FROM MEMBERS WHERE mbr_id='id001';

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

  • 데이터베이스 객체 및 데이터의 사용권한을 관리하는데 사용되는 명령어

GRANT: 데이터베이스 사용자 권한 부여

GRANT [권한] ON [객체의이름] TO [사용자];
-- 예시: GRANT ALL PRIVILEGES ON KSMARTDB.* TO 'KSMARTID'@'%';

REVOKE: 데이터베이스 사용자 권한 회수

GRANT [권한] ON [객체의이름] TO [사용자];
-- 예시: GRANT ALL PRIVILEGES ON KSMARTDB.* TO 'KSMARTID'@'%';

 

데이터베이스 실습

SQL 기본 사용법과 예제

주석

  • 한줄 주석: -- 주석 내용
  • 문장 실행 (전체): F9
  • 원하는 문장만 실행: CTRL+F9
  • 새로고침: F5

데이터베이스 조회

SHOW DATABASES;

SQL 구문은 들여쓰기를 사용

SELECT
    HOST,
    USER
FROM
    USER;

1. 데이터베이스 생성

CREATE DATABASE ksmart52db DEFAULT CHARACTER SET UTF8;

2. 사용자 계정 추가

CREATE USER 'ksmart52id'@'%' IDENTIFIED BY 'ksmart52pw';
  • %는 모든 IP에서 접근 가능함을 의미
  • 특정 IP로 제한 가능

3. 생성된 사용자 계정 조회

USE mysql;
SELECT
    *
FROM
    user;

4. 특정 데이터베이스 권한 부여

GRANT ALL PRIVILEGES ON ksmart52db.* TO 'ksmart52id'@'%';

5. 권한 설정 후 MySQL 메모리 반영

FLUSH PRIVILEGES;​

옵션: 사용자 권한 회수

REVOKE ALL PRIVILEGES ON ksmart52db.* FROM 'ksmart52id';

테이블 목록 조회

SHOW TABLES;

DDL 구문: 테이블 생성

CREATE TABLE members (
    mbr_id VARCHAR(20) NOT NULL COMMENT '회원아이디',
    mbr_name VARCHAR(40) NOT NULL COMMENT '회원이름',
    mbr_telno VARCHAR(20) NOT NULL COMMENT '회원전화번호'
);

DDL 테이블 삭제

DROP TABLE members;

예약어(명령어) 테이블명으로 사용 시 백틱(``) 사용

USE ksmart52db;

CREATE TABLE IF NOT EXISTS `members` (
    mbr_id VARCHAR(10) NOT NULL COMMENT '회원ID',
    mbr_name VARCHAR(50) NOT NULL COMMENT '회원이름',
    mbr_addr VARCHAR(50) NOT NULL COMMENT '회원주소',
    mbr_daddr VARCHAR(10) NOT NULL COMMENT '회원상세주소',
    mbr_zip VARCHAR(10) NOT NULL COMMENT '회원주소우편번호',
    mbr_telno VARCHAR(50) NOT NULL COMMENT '회원연락처',
    mbr_email VARCHAR(255) NOT NULL COMMENT '회원이메일주소',
    mbr_reg_date DATE NOT NULL COMMENT '회원등록일자'
);

DDL TRUNCATE 테이블의 내용을 삭제

TRUNCATE TABLE members;

데이터 삽입

INSERT INTO members
(mbr_id, mbr_name, mbr_addr, mbr_daddr, mbr_zip, mbr_telno, mbr_email, mbr_reg_date)
VALUES
('id001', '홍01', '전북 전주시 기린대로 499', '3층 한국스마트정보교육원', '54888', '010-0001-0001', '홍01@ksmart.or.kr', CURDATE());
  • 다중 데이터 삽입
INSERT INTO members
(mbr_id, mbr_name, mbr_addr, mbr_daddr, mbr_zip, mbr_telno, mbr_email, mbr_reg_date)
VALUES
('id002', '홍02', '전북 전주시 기린대로 499', '4층 한국스마트정보교육원', '54888', '010-0002-0002', '홍02@ksmart.or.kr', CURDATE()),
('id003', '홍03', '전북 전주시 기린대로 499', '5층 한국스마트정보교육원', '54888', '010-0003-0003', '홍03@ksmart.or.kr', CURDATE()),
('id004', '홍04', '전북 전주시 기린대로 499', '6층 한국스마트정보교육원', '54888', '010-0004-0004', '홍04@ksmart.or.kr', CURDATE()),
('id005', '홍05', '전북 전주시 기린대로 499', '7층 한국스마트정보교육원', '54888', '010-0005-0005', '홍05@ksmart.or.kr', CURDATE()),
('id006', '홍06', '전북 전주시 기린대로 499', '8층 한국스마트정보교육원', '54888', '010-0006-0006', '홍06@ksmart.or.kr', CURDATE()),
('id007', '홍07', '전북 전주시 기린대로 499', '9층 한국스마트정보교육원', '54888', '010-0007-0007', '홍07@ksmart.or.kr', CURDATE()),
('id008', '홍08', '전북 전주시 기린대로 499', '10층 한국스마트정보교육원', '54888', '010-0008-0008', '홍08@ksmart.or.kr', CURDATE()),
('id009', '홍09', '전북 전주시 기린대로 499', '11층 한국스마트정보교육원', '54888', '010-0009-0009', '홍09@ksmart.or.kr', CURDATE()),
('id010', '홍10', '전북 전주시 기린대로 499', '12층 한국스마트정보교육원', '54888', '010-0010-0010', '홍10@ksmart.or.kr', CURDATE());

데이터 조회

SELECT
    *
FROM
    members;

ALTER 구문: 특정 컬럼을 식별자로 등록

ALTER TABLE members ADD PRIMARY KEY (mbr_id);

DML 테이블 조회

  • 테이블 약어 지정: FROM 테이블명 약어 형식으로 테이블에 약어를 지정할 수 있습니다.
  • 자동 완성: 약어를 사용하면 약어.컬럼명 형식으로 컬럼명을 자동 완성할 수 있습니다.
  • 테이블명 사용: 축약어를 사용하지 않더라도 테이블명.컬럼명 형식으로 컬럼명을 사용할 수 있습니다.
  • 별칭 사용: AS를 사용하여 컬럼에 별칭을 부여할 수 있습니다. 데이터베이스의 데이터를 Java 객체에 매핑할 때 유용합니다.
  • SELECT 문 실행 순서:
    1. FROM: 어떤 테이블에서 데이터를 가져올지 지정
    2. WHERE: 조건을 지정하여 데이터를 필터링
    3. SELECT: 원하는 컬럼을 선택
    4. ORDER BY: 결과를 정렬
  • 비교 연산자: = 연산자는 Java의 ==와 동일한 역할을 합니다.

예시 쿼리

SELECT
    m.mbr_id AS '아이디',
    m.mbr_name AS '회원',
    m.mbr_addr AS '주소',
    m.mbr_daddr AS '상세주소',
    m.mbr_zip AS '우편번호',
    m.mbr_telno AS '전화번호',
    m.mbr_email AS '이메일',
    m.mbr_reg_date AS '등록일자'
FROM
    members m
WHERE
    m.mbr_addr = '전북 전주시 기린대로 499'
ORDER BY
    m.mbr_id DESC;
  • 약어 사용: members 테이블에 m이라는 약어를 지정합니다.
  • 별칭 사용: 컬럼에 별칭을 부여해 결과를 더 읽기 쉽게 만듭니다.
  • 조건 지정: mbr_addr 컬럼이 특정 값인 데이터를 필터링합니다.
  • 정렬: mbr_id 컬럼을 기준으로 내림차순 정렬합니다.

참고 자료

사전세팅 방법)

  • MySQL 8 설치 및 화면 설명: 링크
  • Heidisql, DBeaver 사전세팅: 링크
  • 데이터베이스 환경변수 설정 및 cmd에서 MySQL 사용: 링크
 
728x90
반응형