Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- multi-threading
- 접근제어지시자
- 인텔리제이 한글 깨짐 해결법
- 반복문
- continue문
- Java
- 상수
- 메서드 오버로딩
- IntelliJ IDEA
- for문
- 메서드
- this예약어
- 자바 멀티스레딩
- 형 변환
- 연관관계
- 인텔리제이 기초 설정
- 포함관계
- 컴파일
- JAVA객체지향
- 집합관계
- 생성자
- 시스템 환경 변수 편집
- java변수
- function
- Java데이터 타입
- OPP개념
- While
- JAVA기초
- break문
- Thread
Archives
- Today
- Total
최원종의 개발 블로그
별칭과 트랜잭션 - 16 본문
별칭 (Alias)
- 칼럼명이나 테이블명에 별명을 붙여서 결과를 읽기 쉽게 함
코드
-- 컬럼에 별칭
SELECT
student_id AS 학번,
name AS 이름,
major AS 학과
FROM student;
-- AS 생략 가능
SELECT student_id 학번, name 이름 FROM student;
-- 테이블에 별칭 (JOIN 에서 유용)
SELECT s.name, su.subject_name, e.score
FROM enrollment e
INNER JOIN student s ON e.student_id = s.student_id
INNER JOIN subject su ON e.subject_id = su.subject_id;
-- e, s, su 가 테이블 별칭
-- 계산 결과에도 별칭
SELECT name, price, price * 0.9 AS 할인가격
FROM product;
트랜잭션 (Transaction)
트랜잭션이란?
여러 SQL 을 하나의 작업 단위로 묶는 것입니다.
모두 성공하면 반영(COMMIT), 하나라도 실패하면 전체 취소(ROLLBACK)

-- 쇼핑몰 주문 처리로 이해하기
주문 처리 시 동시에 일어나야 하는 작업:
1. orders 테이블에 주문 INSERT
2. order_item 테이블에 주문 상세 INSERT
3. product 테이블에서 재고(stock) 감소
만약 1, 2 는 성공했는데 3 에서 오류가 나면?
→ 주문은 됐는데 재고는 그대로 → 데이터 불일치
트랜잭션으로 묶으면:
1, 2, 3 중 하나라도 실패하면 전체 취소 → 일관성 유지
성공 케이스 코드
-- 성공 케이스
use shop;
-- 데이터 확인
select * from orders;
select * from product;
-- 주문 처리시 동시에 일어나야 하는 작업
-- 1. orders 테이블에 주문 insert
-- 2. order_item 테이블에 주문 상세 insert
-- 3. product 테이블에 재로(stock) 감소 update 처리
-- 트랜잭션 시작
start transaction;
-- 1. 주문 생성
insert into orders(member_id, total_price, status)
values(1, 1200000.00, '결제완료');
-- 2. 주문 상세 추가
-- 방금 생성된 주문의 id 확인
select LAST_INSERT_ID();
insert into order_item(order_id, product_id, quantity, price)
values(8, 1, 1, 1200000.00);
-- 3. 재고 감소
update product
set stock = stock - 1
where id = 1;
-- 모두 성공 (물리적인 저장소에 데이터 영구히 저장)
commit;
-- 트랜잭션 종료 (commit, rollback)
실패 케이스 코드
use shop;
select * from orders;
select * from product;
start transaction;
-- 1. 주문 생성
insert into orders (member_id, total_price, status)
values (1, 1200000.00, '결제완료');
-- 2. 주문 상세 추가 id = 10 가정
insert into order_item (order_id, product_id, quantity, price)
values (10, 1, 1, 1200000.00);
-- 3. 재고 감소
update product
set stock = stock - 1
where id = 1;
-- 실패로 처리
rollback; -- (기존에 수행 되었던 쿼리를 다시 시작점으로 초기화 처리)
트랜잭션 명령어
START TRANSACTION : 트랜잭션 시작
COMMIT : 모든 변경사항 영구 저장
ROLLBACK : 모든 변경사항 취소 (시작 전 상태로)
실습 2. 문제
member_id=2 인 회원이 product_id=3 인 상품을 2개 주문합니다.
(total_price = 상품가격 × 수량으로 계산)
1. orders 테이블에 주문 INSERT (status = '결제완료')
2. order_item 에 주문 상세 INSERT
3. product 의 stock 을 2 감소
모두 성공하면 COMMIT
실습2. 코드
SELECT * FROM member;
SELECT * FROM product;
SELECT * FROM orders;
SELECT * FROM shop.order_item;
-- member_id=2 인 회원이 product_id=3 인 상품을 2개 주문합니다.
-- (total_price = 상품가격 × 수량으로 계산)
-- 1 orders 테이블에 주문 INSERT (status = '결제완료')
-- 2. order_item 에 주문 상세 INSERT
-- 3. product 의 stock 을 2 감소
-- 모두 성공하면 COMMIT
select * from product where id = 3;
select * from order_item;
-- 트랜잭션 시작
start transaction;
-- 1. 주문 생성
insert into orders (member_id, total_price, status)
values (2, 2600000.00, '결제완료');
-- 2. 주문 상세 생성
insert into order_item (order_id, product_id, quantity, price)
values (last_insert_id(), 3, 2, 2600000.00);
-- 3. 재고 감소
update product
set stock = stock - 1
where id = 3;
-- 트랜잭션 종료 (commit)
commit; -- 성공시
-- rollback; 실패시
autocommit 주의사항
MySQL 기본 설정: autocommit = ON
→ START TRANSACTION 없이 실행하면 각 SQL 이 즉시 COMMIT
트랜잭션으로 묶으려면:
반드시 START TRANSACTION 을 먼저 실행해야 합니다
Workbench 에서 실수로 ROLLBACK 했는데 데이터가 사라진다면?
→ autocommit 이 ON 이라 이미 COMMIT 된 것
→ ROLLBACK 은 START TRANSACTION 이후만 취소 가능
핵심 요약
별칭 (Alias)
컬럼명 AS 별칭 또는 컬럼명 별칭
테이블에도 별칭 사용 가능 (JOIN 에서 코드 간결)
계산 결과에도 사용 가능
트랜잭션
START TRANSACTION : 시작
COMMIT : 성공 → 영구 저장
ROLLBACK : 실패 → 취소
autocommit
MySQL 기본 ON → 각 SQL 이 자동 COMMIT
수동 제어 → START TRANSACTION 필요
트랜잭션 사용 상황
주문 처리, 결제, 계좌 이체처럼
여러 테이블을 동시에 수정해야 할 때'MySQL' 카테고리의 다른 글
| 샘플 데이터 활용 문제 - 17 _ 1(인라인 필터 추가 설명) (1) | 2026.04.05 |
|---|---|
| 샘플 데이터 활용 문제 - 17 (1) | 2026.04.04 |
| MySQL JOIN - 15 (0) | 2026.04.04 |
| ERD 다이어그램 - 14 (0) | 2026.04.04 |
| 관계 차수 - 13 (0) | 2026.04.04 |

