안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2013년 10월 22일 화요일

[MySql] begin transaction, rollback, commit

MySql 사용 시 백업과 비슷한 방식이다.

Insert, Update, Delete 등과 같이 잘못 사용하면 큰 문제가 일어나는 Query문을 사용할 경우에

자신이 수행한 결과를 다시 Rollback 할 수 있고

제대로 동작했다면 Commit하는 기능을 나타낸다.

Example을 보면 쉽게 이해 할 수 있다.

【예제】
mysql> create table test2 (a int) type=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> set autocommit=1;  ☜ autocommit의 디폴트값이 '1'이므로  실행하지 
않아도 됨
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test2 values(10);
Query OK, 1 row affected (0.00 sec)

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

mysql> update test2 set a=20 where a=10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test2;
+------+
| a    |
+------+
|   20 |
+------+
1 row in set (0.00 sec)

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

mysql> select * from test2;
+------+
| a    |
+------+
|   10 |
+------+
1 row in set (0.00 sec)

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

mysql> update test2 set a=20 where a=10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

mysql> select * from test2;
+------+
| a    |
+------+
|   20 |
+------+
1 row in set (0.00 sec)

mysql>


현재의 autocommit 상태를 확인하는 방법은 다음 예제와 같다. 【예제】 mysql> select @@session.autocommit; +----------------------+ | @@session.autocommit | +----------------------+ | 1 | +----------------------+ 1 row in set (0.03 sec) mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> select @@session.autocommit; +----------------------+ | @@session.autocommit | +----------------------+ | 0 | +----------------------+ 1 row in set (0.01 sec) mysql>

출처 : http://radiocom.kunsan.ac.kr/lecture/mysql/begin_commit_rollback.html