본문 바로가기
SQL

[SQL] 메타코드M 비전공자 맞춤 SQLD 강의 (2) - DML, TCL

by 모닥불🔥 2024. 1. 30.

메타코드m의 SQLD 강의를 정리하는 두 번째 시간! 오늘은 DML과 TCL에 대해 정리한다.
 
[🔥 이전 글은 여기로]

[SQL] (필기 무료 공유) 메타코드M 비전공자 맞춤 SQLD 강의 (1) - DCL, DDL

2023년 11월 18일에 SQLD 시험을 쳤었다. 당해 빅분기 실기가 12월 2일에 있었다. 욕심이 많아 한 번에 다 준비하려고 했고, 퇴근 후에 총 5일 정도 공부해서 결과는 SQLD 58점 탈락...😨(심지어 하나 실

tdtd.tistory.com

 
메타코드M SQLD 자격증 문제 풀이 2시간 - 비전공자 맞춤형 [대기업 데이터분석 현직자 강의]
https://www.youtube.com/watch?v=8uP_E6SyiuM


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

 
DML은 정의된 데이터베이스(테이블)에 데이터를 입력, 수정, 삭제 및 조회하는 명령어이다.
 
예를 들어 DDL로 '메뉴판'이라는 이름의 테이블을 만들고 '메뉴', '가격'과 같은 열을 생성했다면 DML은 여기다가 '김밥', '라면'이라는 실제 메뉴와 '2,000원', '4,000원'이라는 실제 가격을 입력하는 기능이라 생각하면 된다.
 
DML에는 INSERT(입력), UPDATE(수정), DELETE(삭제), SELECT(조회)가 있다. SELECT문이 복잡하고 배울 게 많아서 보통 SELECT문은 따로 다루는 경우가 많은 것 같다(이 강의도 그렇다).

INSERT의 기본형

INSERT INTO 테이블명 (열이름) VALUES ('해당하는 값');

 
예를 들어, INSERT INTO MENU(NAME) VALUES('연어스시'); 라는 구문을 쓰면 MENU라는 테이블의 NAME이라는 열에 '연어스시'라는 값을 넣는다는 뜻
 

UPDATE의 기본형

UPDATE 테이블명 SET 열 = '변경값' WHERE [조건];

 
예를 들어, UPDATE MENU SET discount_rate = 10 (WHERE NAME = '연어스시'); 라고 되어 있으면, MENU라는 테이블에서 NAME이 '연어스시'인 경우의 할인률(discount_rate)을 10으로 바꿔 줘. 라는 의미이다.
 
+) 여기에서, 조건문에 해당하는 WHERE을 먼저 읽었는데 SQL문이 실행되는 순서도 시험에서 중요하게 다뤄진다. 순서를 잘못 해석하면 전혀 다른 결과가 나오기 때문에 중요! 미리 언급하자면 SELECT문은 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순으로 실행된다.
 

DELETE의 기본형

DELETE FROM 테이블명 WHERE [조건];

 
WHERE 조건 절은 붙여도 되고 안 붙여도 된다.
DELETE FROM 테이블명; -> 이렇게 쓰면 테이블 전체 데이터를 삭제할 수 있다(단, 테이블의 구조는 그대로 남아 있다).
 
DELETE문에서 'FROM'은 생략할 수 있다.
DELETE FROM 테이블명; = DELETE 테이블명;


+) 추가로 알아둘 것
 
여러 열에서 한꺼번에 원하는 값을 추가할 수 있다. 단 괄호 속 열의 개수와 값의 개수는 같아야함!
INSERT INTO 테이블명 (열이름1, 열이름2, ...) VALUES (값1, 값2, ...);
 
제약조건에 위배되지 않는 선에서는 일부 칼럼(열)에만 값 추가 가능!
예를 들어, 메뉴코드, 가격, 메뉴명 열이 있을 때 메뉴명=not null이라는 제약조건이 붙어 있다면,
not null이어야 하는 열은 반드시 값을 추가해 주어야 함.
INSERT INTO MENU (메뉴코드, 가격) VALUES ('101', 50000); 이런 식으로 쓰면 오류가 난다.
 
따로 열 이름을 지정하지 않으면 전체 칼럼 값을 모두 입력해야 한다.
INSERT INTO MENU VALUES ('102', '와규', 30000,   );
위와 같이 쓸 수 있다. 테이블명 뒤에 열 이름을 따로 지정하지 않으면 전체 컬럼의 값들이 모두 들어가도록 한다. (넣을 게 없으면 위 예시처럼 공백이라도 넣어야 함)


+) DELETE의 중요한 특징
 
① 삭제된 데이터에 대해 로그를 남길 수 있는 방법이다.
② WHERE문을 사용하여 특정 행만 지울 수 있다.
③ DELETE로 삭제한 값은 DB에 반영하기 전까지 되돌리기가 가능하다.
(COMMIT로 DB에 반영하기 전까지 ROLLBACK으로 되돌리면 됨)
④ 데이터가 삭제되더라도 용량은 유지된다.
 
DROP, TRUNCATE, DELETE의 차이를 반드시 알아두자!


🔥 트랜잭션 제어어(TCL: Transaction Control Language)

 
TCL은 DML인 INSERT, UPDATE, DELETE에서 트랜잭션이 발생하면 이를 저장, 되돌리기, 분할하는 기능을 한다.
COMMIT(저장), ROLLBACK(되돌리기), SAVEPOINT(코드 분할)가 있다.
 
SQL서버를 기준으로, DDL은 auto-commit (자동 저장)이 되므로 DROP, TRUNCATE 등 DDL 명령은 되돌릴 수 없다.
오라클은 auto-commit이 아니므로 되돌릴 수 있음. SQL서버와 오라클 모두 DML문은 수동으로 COMMIT을 해주어야 한다.
(* 대표적으로  SQL서버와 오라클이라는 환경을 많이 사용함)
 

  • 쉽게 설명하자면, COMMIT은 저장이다. 우리가 word 파일에서 문서 작업을 하다가 Ctrl + S로 저장하듯이 commit을 하면 저장이 되는 것! 저장한 후 그 전 파일로 되돌릴 수 없다는 것도 유사함.
  • ROLLBACK은 Ctrl+z와 비슷하다. 방금 작업을 취소할 수 있는 것. SQL에서 ROLLBACK을 사용하면 이전 SAVEPOINT까지, 혹은 이전 COMMIT까지 되돌린다. 우리가 문서 작업을 하다가 '저장 안함' 하고 닫는 거랑 유사하게 마지막으로 저장한 지점까지만 저장이 되고 나머지는 날라간다.
  • SAVEPOINT는 게임에서 세이브를 하는 것처럼 특정 지점에서 SAVEPOINT를 찍어두면 ROLLBACK 해도 그까지는 남아 있는 것!
COMMIT, ROLLBACK, SAVEPOINT의 효과
① 데이터 무결성을 보장한다.
② 영구적으로 변경하기 전 확인이 가능하다.
③ 논리적으로 연관성이 있는 작업을 그룹화 할 수 있다(COMMIT)

+) 트랜잭션의 특성
- 고립성: 트랜잭션이 실행되는 동안 다른 트랜잭션의 영향을 받지 않아야 한다(애니메이션을 보면 변신 장면에서는 적들이 공격 안하고 기다려주는 뭐 그런 느낌ㅎ).
- 원자성: all or nothing. 트랜잭션에서 정의된 연산은 모두 성공적으로 실행되거나 아니면 전혀 실행되지 않은 상태여야 한다(모 아니면 도! 뉴런도 이런 식으로 작동한다. 역치를 넘어서면 발화하거나 그렇지 않거나..).
- 지속성: 트랜잭션이 성공적으로 완료되면 갱신된 데이터베이스 내용이 영구적으로 저장된다(바꿨는데 다시 되돌아가면 의미가 없으니까 당연한 이야기 같다.).
- 일관성: 트랜잭션 발생 전 데이터베이스에 잘못된 점이 없다면 수정 후에도 데이터베이스 내용에 잘못된 곳이 있으면 안된다.
 
트랜잭션의 특성은 객관식으로 자주 나오는 내용이므로 외워둘 것!

다음에는 SELECT문 일부와 데이터타입에 대해 정리할 예정이다. 필기 노트를 원하는 사람은 이전 글을 참고하면 된다. 퇴근하고 글을 쓰고 공부도 하고 있기 때문에 무리하지 않는 수준에서 꾸준히 조금씩 블로그로 정리하려고 함. 그럼 이만, 화르륵 🔥