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 |