2025-04-17 [22일차]

dong_c·2025년 4월 17일

수업 정리

수업페이지


4/27 시험 안내
시험과목) ddl / dml

DDL : 데이터 정의 언어
데이터 베이스 구조에 대한 명령(데이터 틀 만들기)
ex)db 생성, 테이블 생성, db 삭제, 테이블 삭제

DML : 데이터 조작 언어 (CRUD - 입력.조회)
실제로 데이터를 조작하는 명령
ex) 데이터 추가, 수정, 삭제, 조회

시험 준비시 알아둬야 하는 부분

  • 테이블 구조 변경 o
    변경된 구조 확인 o
    인덱스 o
    다양한 SELECT 활용
    (select , from , join, on , group by , having 등등....)
    JOIN o

JOIN 채점기준 --> join의 개념에서
중요한 포인트 잘 알아두기 (서술형 평가)

답변 작성시 mysqlyog에서 작성하고 답변란에 붙여넣기 하기
(오타 방지)


시험 제외 목록

  • db 생성, db 삭제 x
    테이블 생성 x

트랜잭션
-> 하나의 논리적인 작업 단위
작업 단위

-> 입출금
A가 B에게 입금을 한다

A계좌에서 돈이 빠져나가고 (값이 수정되기에 update)
B계좌에 돈이 추가되고 (얘도 update)

update member
set account = 10000
where name = a

vupdate member
set account = 30000
where name = b

-> 이 둘을 하나로 묶는 것
(작업단위/내가 원하는 포인트를 잡아서
정상적인 수행이 하나라도 안됐다면 안됐다 가정!)

트랜잭션 보강 설명)
작업 단위 나눠서 사용할 수 있게 하는 문법
단위 안에 있는 쿼리가 모두 성공했을 때만 성공, 하나라도 실패하면
전부 실패로 판단

트랜잭션 명령어 및 상태
start transaction -> 단위의 시작지점 정하는
commit -> 성공상황인걸 확인했으니 정상적으로 완료하겠다
(실제로 데이터를 변경하겠다)
rollback -> 뭐라도 하나 실패한다면 전부 실패로 판단,
다시 이전(직전 commit 상태) 으로 돌려보냄

auto commit -> 쿼리를 실행하면
자동으로 커밋될 수 있게 설정이 되어있는 상태 ( SQL 기본 설정으로
되어 있음) - 그래서 트랜잭션 명령어 굳이 입력안해도 되는 것/
우리 프로그램은 트랜잭션 생략되어 있음(auto commit 상태))

트랜잭션의 존재이유
-> 단위를 나눠서 개발자가 직접적인 제어를 하라고 있는 문법


특징(acid)

A(atomicity) - 원자성
데이터베이스 실행할때 모두 되거나 아예 안되거나
C-일관성
작업 상태가 일관성 있게
I- 독립성
트랜잭션이 여러개 실행 될때 다른 트랜잭션에게 영향 줄수 x
(트랜잭션끼리 같을지라도)
D-영구성
실제로 적용해서 영구적으로 보관할 수 있어야함(commit!)

-> 더 궁금하다면 검색 추천


프로시저

미리 작성해둔 SQL의 집합

우리가 알고 있는 함수와 매우 유사
-> why?

자바에서의 메서드 (함수)
메서드는 내가 원하는 기능을 할 수 있게끔 미리 정해둔것
... 뭔가 프로시저와 기능이 비슷한 것 같다!

  • delimiter (콜론 마침표와 같은 역할 -구분의 목적)
    주로 // 씀 -> 프로시저 생성할때 임시로!

웹개발에서는 그렇게 사용하지는 않음
(동적인 처리 할 때는 사용하긴 함)


함수와의 차이점)

프로시저는 값의 반환이 없음
호출하는 방식이 다르다

함수와의 공통점)
호출하면 쓸 수 있음
함수처럼 인자를 사용할 수 있다


함수

하나의 값을 반환하는 SQL 블럭 (함수는 리턴이 필수!)

프로시저와 유사하지만 차이는 리턴의 유무에서 다름

함수의 리턴은 하나만 가능

만들어져 있는 기능을 수행하고 결과를 돌려준다

-> 일반적으로 SELECT 와 함께 사용

  • DECLARE = 데이터 베이스 안에 변수 만드는 명령어

deterministic

not deterministic


이벤트

DB에서의 이벤트

정해진 시간에 자동으로 실행되는 작업

mysql에서 스케줄러를 사용할 수 있는 설정
(일반적으로 db에서는 설정 완돼있음

set global event_scheduler = on; (스케줄러 끄고 싶으면 off)

cretae event deletearticle
on schedule at 2025-04-17 11:38:00;
do	
	delete from article where 1d = 9;
    
    select * from article;
 그 시간에 그거 삭제할거야!(한번만!) 
반복적으로 사용하고 싶으면 스케줄러 옆에 every 입력해야함

트리거
특정 테이블에 insert, update, delete가 발생할 때
자동으로 실행되는 SQL의 집합

-> insert, update, delete의 쿼리가 실행되고
나서 자동으로 실행될 이 아님

어떤 동작을 하면 그에 상응하는 무슨 일이 벌어져야 한다

백업 데이터 만들때 운용 , 로그 만들때 사용


articlDumy(백업) - id, regdate ,title, content

aricle - id, regdate ,title, content

................

delete from article;

insert into articleDumy
select * from article;


트리거 사용 예시

delimiter//

create trigger deleteArticle
after delete on `member`
FOR EACH ROW (줄의 단위로 동작?)
begin
	insert into article
    	set regDate = now()
        	, title = 'qwe'
            , `body` = 'qwe'
            , memberId = 2
end//

delimiter;

select * from article;

select * from `member`;


delete from `member` where id = 4;

sso 통합 로그인?

profile
코딩초보

0개의 댓글