DB/명령프롬프트 - mysql

[MySQL] 트랜잭션 (transaction) 생성

congs 2023. 3. 27. 10:40

: 하나의 작업을 하기위한 명령어 묶음 단위

  • 하나의 트랜잭션에서 실행하는 모든 명령어가 모두 완료되어야 = 전체가 완료되는 형태
  • 만약, 하나라도 작업이 취소된다면 모두 취소 (성공-성공-실패-성공 = 실패)
  • 명령을 모두 받아보고 나중에 결정하는 개념
  • 임시 실행한다는 개념 (결과를 임시 저장=미리해보기)
  • update, delete 에서 테스트 확인용으로 사용!

 

트랜잭션 transaction 생성

Start transaction
명령어 1;
명령어 2;
...
commit ; / rollback ;
- commit : 작업 반영
- rollback : 작업 취소
  • DB에서 JAVA로 받아 조건을 달아서 사용
  • JAVA에서 if ( ... == commit )으로 사용

commit 그대로 실행 사용시

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into buy(customer, product_name, price, amount)
    -> select '다래', name, price, 3 from product
    -> where num = 1;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into buy(customer, product_name, price, amount)
    -> select '졸려', name, price, 5 from product
    -> where num = 3;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from buy;
+-----+----------+-------------------+-------+--------+---------------------+
| num | customer | product_name      | price | amount | buy_date            |
+-----+----------+-------------------+-------+--------+---------------------+
|   1 | 홍길동   | 폴라티셔츠        | 15000 |      3 | 2023-03-24 17:22:02 |
|   2 | 홍길순   | 에어나시          |  9000 |      5 | 2023-03-24 17:22:02 |
|   3 | 이순신   | 양털 겨울 코트    | 50000 |      1 | 2023-03-24 17:22:02 |
|   5 | 동글님   | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:44:58 |
|   6 | 다래     | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:48:31 |
|   7 | 다래     | 폴라티셔츠        | 15000 |      3 | 2023-03-27 10:32:45 |
|   8 | 졸려     | 순면라운드 반팔티 | 15900 |      5 | 2023-03-27 10:33:14 |
+-----+----------+-------------------+-------+--------+---------------------+
7 rows in set (0.00 sec)

mysql> commit; //확인
Query OK, 0 rows affected (0.00 sec)

mysql> select * from buy;
+-----+----------+-------------------+-------+--------+---------------------+
| num | customer | product_name      | price | amount | buy_date            |
+-----+----------+-------------------+-------+--------+---------------------+
|   1 | 홍길동   | 폴라티셔츠        | 15000 |      3 | 2023-03-24 17:22:02 |
|   2 | 홍길순   | 에어나시          |  9000 |      5 | 2023-03-24 17:22:02 |
|   3 | 이순신   | 양털 겨울 코트    | 50000 |      1 | 2023-03-24 17:22:02 |
|   5 | 동글님   | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:44:58 |
|   6 | 다래     | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:48:31 |
|   7 | 다래     | 폴라티셔츠        | 15000 |      3 | 2023-03-27 10:32:45 |
|   8 | 졸려     | 순면라운드 반팔티 | 15900 |      5 | 2023-03-27 10:33:14 |
+-----+----------+-------------------+-------+--------+---------------------+
7 rows in set (0.00 sec)

 

rollback  되돌아가기 사용시

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into buy(customer, product_name, price, amount)
    -> select '으각', name, price, 2 from product
    -> where num = 1;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from buy;
+-----+----------+-------------------+-------+--------+---------------------+
| num | customer | product_name      | price | amount | buy_date            |
+-----+----------+-------------------+-------+--------+---------------------+
|   1 | 홍길동   | 폴라티셔츠        | 15000 |      3 | 2023-03-24 17:22:02 |
|   2 | 홍길순   | 에어나시          |  9000 |      5 | 2023-03-24 17:22:02 |
|   3 | 이순신   | 양털 겨울 코트    | 50000 |      1 | 2023-03-24 17:22:02 |
|   5 | 동글님   | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:44:58 |
|   6 | 다래     | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:48:31 |
|   7 | 다래     | 폴라티셔츠        | 15000 |      3 | 2023-03-27 10:32:45 |
|   8 | 졸려     | 순면라운드 반팔티 | 15900 |      5 | 2023-03-27 10:33:14 |
|  10 | 으각     | 폴라티셔츠        | 15000 |      2 | 2023-03-27 10:37:06 |
+-----+----------+-------------------+-------+--------+---------------------+
8 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from buy;
+-----+----------+-------------------+-------+--------+---------------------+
| num | customer | product_name      | price | amount | buy_date            |
+-----+----------+-------------------+-------+--------+---------------------+
|   1 | 홍길동   | 폴라티셔츠        | 15000 |      3 | 2023-03-24 17:22:02 |
|   2 | 홍길순   | 에어나시          |  9000 |      5 | 2023-03-24 17:22:02 |
|   3 | 이순신   | 양털 겨울 코트    | 50000 |      1 | 2023-03-24 17:22:02 |
|   5 | 동글님   | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:44:58 |
|   6 | 다래     | 순면라운드 반팔티 | 15900 |      3 | 2023-03-27 09:48:31 |
|   7 | 다래     | 폴라티셔츠        | 15000 |      3 | 2023-03-27 10:32:45 |
|   8 | 졸려     | 순면라운드 반팔티 | 15900 |      5 | 2023-03-27 10:33:14 |
+-----+----------+-------------------+-------+--------+---------------------+
7 rows in set (0.00 sec)