Transaction


Transaction

송금, 계좌이체, 거래 느낌

 

MySQL Transaction 설정

show variables like 'autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
-- Default 는 autocommit 이다.

set autocommit=off -- autocommit 기능 끄기
show variables like 'autocommit%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+

영구적으로 사용하려면 /etc/my.cnf 파일의 
[mysqld] 섹션 밑에 autocommit=0 적어주면 됨

 

Transaction 시나리오

bank 데이터데이스 안에 bank_accounts 테이블을 만들고bank_account, total_money 섹션을 만들어 주었다.

+------------------+-------------+
| bank_account     | total_money |
+------------------+-------------+
| chulsoo_account  |       10000 |
| younghee_account |       10000 |
+------------------+-------------+
2 rows in set (0.000 sec)

 

철수가 영희한테 1000원을 송금한다.
여기에는 두가지 경우의 수가 있다.

1. 성공적으로 송금완료 하는 경우 >> commit 실행
2. 전산장애등의 이유로 송금 실패하는 경우 >> rollback 실행

start transaction; / BEGIN; -- 여기부터 commit / rollback 이 가능
update bank_accounts
    -> set total_money=9000
    -> where bank_account='chulsoo_account';
+------------------+-------------+
| bank_account     | total_money |
+------------------+-------------+
| chulsoo_account  |        9000 |
| younghee_account |       10000 |
+------------------+-------------+
# 여기서 끝내면 안됨 (영희한테 돈이 안갔음)

update bank_accounts set
    -> total_money=11000
    -> where bank_account='younghee_account';
+------------------+-------------+
| bank_account     | total_money |
+------------------+-------------+
| chulsoo_account  |        9000 |
| younghee_account |       11000 |
+------------------+-------------+
# 이제 완료해야 함
commit; -- transaction 끝내기 여기 전까지는 다른 곳에서 확인했을때 적용 안되어있음
# 문제가 있다면 ROLLBACK; 문제가 없으면 COMMIT;

 

** Database 나 Table은 삭제 했을 때 롤백 안된다. 그러니 백업을 철저히 합시다.

'DataBase' 카테고리의 다른 글

DataBase 복습을 위한 실습  (0) 2024.02.05
DataBase 연동  (0) 2024.02.02
View / Backup  (0) 2024.02.02
Key 와 MySQL Data Type  (0) 2024.02.01
외래키 설정 및 Table Join  (0) 2024.02.01

+ Recent posts