ROKEY

[20250213] 데브옵스 - DBMS 2

kode-daks 2025. 2. 14. 11:20

수업 목표

- SQL 문장의 문법을 이해하고 코드를 작성할 수 있다.

- 조인 문법을 이해하고 코드를 작성할 수 있다.

- MySQL을 사용하여 데이터베이스에 연결하고 테이블을 생성할 수 있다.

- MySQL을 사용하여 데이터를 삽입, 조회, 수정, 삭제할 수 있다.

 

 

1. SQL 문장

DML

- SELECT : 테이블이나 뷰에 있는 데이터를 조회

- INSERT : 데이터를 신규로 생성

- UPDATE : 기 생성된 데이터를 수정

- DELETE : 데이터 삭제

 

TCL

- COMMIT : 변경된 데이터를 최종 적용

- ROLLBACK : 변경된 데이터를 적용하지 않고 이정 상태로 되돌림

 

INSERT

- 새 데이터를 입력할 때 사용하는 구문

- INSERT INTO : 새로운 데이터를 추가하기 위한 테이블의 컬럼 지정

    * 컬럼 목록을 명시적으로 지정하는 것을 권장 (DEFAULT 값 활용 가능)

- VALUES : 테이블 각 컬럼에 추가할 데이터 값

    * 괄호 안의 값 순서와 타입이 테이블명 괄호 안 컬럼의 순서, 타입과 일치해야 함

- SELECT 문 : VALUES 절에 값을 명시하는 대신 조회된 내용을 사용

    * 테이블명 괄호 안의 커럼 순서와 타입과 동일해야 함

-- 기본 구문
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...)

-- 컬럼 생략 (모든 컬럼 대상)
INSERT INTO 테이블명
VALUES (값1, 값2, ...)

-- INSERT~SELECT 형태
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
SELECT 문;

 

SELECT

- 테이블 또는 뷰에 있는 데이터 선택(조회)에 사용

SELECT 컬럼명 -- 선택하고자 하는 컬럼명, 모든 컬럼은 *
FROM 테이블명 -- 선택할 테이블이나 뷰 명
WHERE 조건 -- 선택 조건, 여러 조건 기술 시 AND OR로 연결
ORDER BY 컬럼명; -- 컬럼에 따라 정렬

 

UPDATE

- 테이블에 있는 기존 데이터를 수정하는 문장

UPDATE 테이블명 -- 업데이트 대상 테이블명
SET 컬럼1 = 변경값1, -- 변강하고자 하는 컬럼과 그 값. 콤마로 분리
    컬럼2 = 변경값2,
    ...
WHERE 조건; -- 특정 조건에 맞는 데이터만 변경

 

DELETE

- 테이블에 있는 데이터를 삭제하는 문장

DELETE FROM 테이블명 -- 삭제하고 싶은 데이터가 포함된 대상 테이블명 명시
WHERE 조건 -- 삭제 조건

 

COMMIT

- 변경한 데이터를 데이터베이스에 최종적으로 반영

- 기본적으로 자동 커밋 (AUTOCOMMIT) 설정

COMMIT; -- 명령어

SELECT @@AUTOCOMMIT; -- AUTOCOMMIT 여부 확인

SET AUTOCOMMIT = 1 -- 또는 0. 1: 설정, 0: 일시적 해제

 

ROLLBACK

- 변경한 데이터를 변경 전 상태로 되돌림

- ROLLBACK; 으로 실행

 

SAVEPOINT

- 특정 시점으로 롤백할 수 있도록 저장점을 설정

- SAVEPOINT 저장점_이름; 으로 실행

 

2. 조인

- 테이블 간의 관계를 잇는 방법으로 두 개 이상의 테이블에서 데이터를 결합하여 조회할 때 사용함

 

조인의 종류

- INNER JOIN : 두 테이블에서 일치하는 데이터만 반환

- LEFT JOIN (LEFT OUTER JOIN)

    - 왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블의 데이터를 반환

        *왼쪽에 있는 걸 기준으로 합침

- RIGHT JOIN (RIGHT OUTER JOIN)

    - 오른쪽 테이블의 모든 행과 일치하는 왼쪽 테이블의 데이터를 반환

        *오른쪽에 있는 걸 기준으로 합침

- FULL JOIN (FULL OUTER JOIN)

    - 두 테이블의 모든 행을 반환 (MySQL에서는 지원하지 않아 UNION을 사용함)

        * 있든 없든 합침

- CROSS JOIN : 두 테이블의 모든 행을 조합한 결과를 반환

- SELF JOIN : 같은 테이블을 자기 자신과 조인

-- INNER JOIN
SELECT A.컬럼명, B.컬럼명
FROM 테이블A AS A
INNER JOIN 테이블B AS B
ON A.공통컬럼 = B.공통컬럼

-- LEFT JOIN
SELECT A.컬럼명, B.컬럼명
FROM 테이블A AS A -- 왼쪽 테이블
LEFT JOIN 테이블B AS B -- 오른쪽 테이블
ON A.공통컬럼 = B.공통컬럼

-- RIGHT JOIN
SELECT A.컬럼명, B.컬럼명
FROM 테이블A AS A -- 왼쪽 테이블
RIGHT JOIN 테이블B AS B -- 오른쪽 테이블
ON A.공통컬럼 = B.공통컬럼

-- SELF JOIN
SELECT A.컬럼명, B.컬럼명
FROM 테이블A AS A
JOIN 테이블B AS B
ON A.공통컬럼 = B.공통컬럼

 

3. 파이썬 DB 연동

- MySQL Connector 모듈 설치

    - pip install pymysql

    - import pymysql

import pymysql


# MySQL 서버에 연결
conn = pymysql.connect( # Connection class 객체 생성
    host="localhost", # MySQL 서버 주소 (로컬인 경우 'localhost')
    user="root", # MySQL 사용자명
    password="password", # MySQL 비밀번호
    database="exampledb", # 사용할 데이터베이스 명
    charset='utf8mb4', # UTF-8의 확장 버전
# DictCursor 클래스: sql 구문 실행 후, 조회된 결과를 딕셔너리 형태로 반환
    cursorclass=pymysql.cursors.DictCursor
)
cursor = conn.cursor() # cursor 함수 객체 생성
# 현재 선택된 데이터베이스 확인
cursor.execute("SELECT DATABASE()")
print("현재 데이터베이스:", cursor.fetchone())

conn.commit() # 변경사항 저장
conn.close()