최원종의 개발 블로그

별칭과 트랜잭션 - 16 본문

MySQL

별칭과 트랜잭션 - 16

chl6698 2026. 4. 4. 12:46

별칭 (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