mysql 트랜잭션 사용법
페이지 정보
작성자 JMStudy 작성일06-08-10 14:09 조회7,499회 댓글0건본문
MySQL이 지원하는 table type : MyISAM, ISAM, HEAP, DBD, InnoDB, MERGE
table type을 innodb나, bdb로 설정하면(디폴트는 MyISAM) 트랜잭션을 사용할 수 있다.
자신의 MySQL서버가 이를 지원하는지 다음과 같은 질의로 파악할 수 있다.
아래의 경우, innodb만을 지원하고 bdb는 지원하지 않는 상태이다.
mysql> show variables like 'have_bdb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_bdb | NO |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
1 row in set (0.00 sec)
트랜잭션은 begin work, commit, rollback으로 처리된다.
디폴트로 auto-commit mode상태인데 이를 disable하려면 다음과 같이 하면 된다.
mysql> set autocommit=0; (disable auto-commit mode)
mysql> set autocommit=1; (enable auto-commit mode)
create table member_inno
(
id varchar(10) primary key,
name varchar(10) not null
) type=innodb;
member_inno 테이블을 innodb형태로 생성한 다음, 1개의 row를 insert한다.
mysql> create table member_inno
-> (
-> id varchar(10) primary key,
-> name varchar(10) not null
-> ) type=innodb;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into member_inno values('maddog', '강명규');
Query OK, 1 row affected (0.01 sec)
mysql> select * from member_inno;
+--------+--------+
| id | name |
+--------+--------+
| maddog | 강명규 |
+--------+--------+
1 row in set (0.02 sec)
begin (work) -> 1개의 row를 insert -> rollback 수행후, 결과를 본다.
서버는 디폴트로 auto-commit모드이므로 트랜잭션을 알리는 begin으로 시작한다.
MS-SQL도 이런 방식인 것으로 기억하는데, 오라클의 경우, 항상 트랜잭션이 활성화된 상태이다.
mysql> begin work;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into member_inno values('kang', '강명규');
Query OK, 1 row affected (0.00 sec)
mysql> select * from member_inno;
+--------+--------+
| id | name |
+--------+--------+
| kang | 강명규 |
| maddog | 강명규 |
+--------+--------+
2 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from member_inno;
+--------+--------+
| id | name |
+--------+--------+
| maddog | 강명규 |
+--------+--------+
1 row in set (0.00 sec)
mysql>
* InnoDB의 제공기능
Automatic crash recovery
referential integrity
row-level locking
non-locking select(multi-versioning: 오라클,PostgreSQL에서 사용하는 락개념. MS-SQL은 다른 lock메커니즘을 사용한다.)
참고로 트랜잭션이 가지는 ACID라는 특성을 정리해보자.
Atomicity All or Nothing. 모두 성공하거나, 아니면 모두 실패.
Consistency 트랜잭션 전후, DB는 일관적인 상태에 있다. 즉, DB가 엉키지 않는다.
Isolation 트랜잭션간에 서로 민폐를 끼치지 않는다. 즉, 각 트랜잭션은 따로 논다.
Durability 트랜잭션이 성공하면, 결과는 DB에 영구적으로 반영된다.
This article comes from dbakorea.pe.kr (Leave this line as is)
table type을 innodb나, bdb로 설정하면(디폴트는 MyISAM) 트랜잭션을 사용할 수 있다.
자신의 MySQL서버가 이를 지원하는지 다음과 같은 질의로 파악할 수 있다.
아래의 경우, innodb만을 지원하고 bdb는 지원하지 않는 상태이다.
mysql> show variables like 'have_bdb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_bdb | NO |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'have_innodb';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb | YES |
+---------------+-------+
1 row in set (0.00 sec)
트랜잭션은 begin work, commit, rollback으로 처리된다.
디폴트로 auto-commit mode상태인데 이를 disable하려면 다음과 같이 하면 된다.
mysql> set autocommit=0; (disable auto-commit mode)
mysql> set autocommit=1; (enable auto-commit mode)
create table member_inno
(
id varchar(10) primary key,
name varchar(10) not null
) type=innodb;
member_inno 테이블을 innodb형태로 생성한 다음, 1개의 row를 insert한다.
mysql> create table member_inno
-> (
-> id varchar(10) primary key,
-> name varchar(10) not null
-> ) type=innodb;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into member_inno values('maddog', '강명규');
Query OK, 1 row affected (0.01 sec)
mysql> select * from member_inno;
+--------+--------+
| id | name |
+--------+--------+
| maddog | 강명규 |
+--------+--------+
1 row in set (0.02 sec)
begin (work) -> 1개의 row를 insert -> rollback 수행후, 결과를 본다.
서버는 디폴트로 auto-commit모드이므로 트랜잭션을 알리는 begin으로 시작한다.
MS-SQL도 이런 방식인 것으로 기억하는데, 오라클의 경우, 항상 트랜잭션이 활성화된 상태이다.
mysql> begin work;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into member_inno values('kang', '강명규');
Query OK, 1 row affected (0.00 sec)
mysql> select * from member_inno;
+--------+--------+
| id | name |
+--------+--------+
| kang | 강명규 |
| maddog | 강명규 |
+--------+--------+
2 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from member_inno;
+--------+--------+
| id | name |
+--------+--------+
| maddog | 강명규 |
+--------+--------+
1 row in set (0.00 sec)
mysql>
* InnoDB의 제공기능
Automatic crash recovery
referential integrity
row-level locking
non-locking select(multi-versioning: 오라클,PostgreSQL에서 사용하는 락개념. MS-SQL은 다른 lock메커니즘을 사용한다.)
참고로 트랜잭션이 가지는 ACID라는 특성을 정리해보자.
Atomicity All or Nothing. 모두 성공하거나, 아니면 모두 실패.
Consistency 트랜잭션 전후, DB는 일관적인 상태에 있다. 즉, DB가 엉키지 않는다.
Isolation 트랜잭션간에 서로 민폐를 끼치지 않는다. 즉, 각 트랜잭션은 따로 논다.
Durability 트랜잭션이 성공하면, 결과는 DB에 영구적으로 반영된다.
This article comes from dbakorea.pe.kr (Leave this line as is)
댓글목록
등록된 댓글이 없습니다.