잠시만 기다려 주세요


 
HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (763)  |  추천 및 재미 (15)  |  자료실 (16)  |  끄적거림 (421)  |  시나리오 (757)  |  드라마 대본 (248)  |  

2019년 04월 22일
아직 사회에는 말로만 정의로운 체 하고 생각은 이기적인 사람들이 많다. 절대 그들을 닮지 말자. 그들은 스스로가 나쁜 놈, 나쁜 년 인지조차 알지 못한채 세상을 살아간다. - 바다아이
 

    DATABASE

DATABASE - Mysql 트랜잭션 사용하기
이 름 : 바다아이   |   조회수 : 1738         짧은 주소 : https://www.bada-ie.com/su/?271523154031

° 출처 : http://web.lge.cn:8000/system/mysql/2041

 

[ 트랜잭션 이란 ? ]
어떤 작업을 수행할 때 작업이 실패하더라도 이 잘못된 작업이 실질적으로 수행해야 할 작업에는 영향을 미치지 않도록 하는 기능이다.
예를 들어서, 내가 계좌이체를 승인하는 버튼을 눌렀을 때 정전이 일어났을 경우 이미나의 통장에서는 돈이 빠져나간 상태이고 상대방에게는 이체가 되지 않은 상황이 발생하게 된다.
그럼 이 돈은 어떻게 되는 것 일까요?
이러한 문제가 발생하지 않도록 해주는 기능을 트랜잭션이라고 할 수 있겠습니다.

 

mysql에서의 트랜잭션은 버전 3.23.x 버전부터 지원가능 합니다.
그러므로 3.22.x 버전 사용자를 트랜잭션을 사용할 수 없게 되어있습니다.
3.23.x 버전에서 트랜잭션기능을 사용하기 위해서는 버클리대학에서 만든 버클리 DB를 설치해야 합니다.

 

이 버클리 DB 는 mysql을 바이너리로 설치할 경우 자동으로 설치가 되며, 소스로 설치 할 경우 따로 버클리 DB 를 설치해야 트랜잭션을 사용 가능합니다.
mysql-3.23.34 에서는 BDB 소스가 Mysql 소스 안에 포함되어 있기 때문에 소스를 받아 설치 할 필요가 없습니다.
단지 Mysql을 컴파일 할 때 옵션만 추가해 주면 됩니다. [ --with-bekeley-db ]

 

 

[ 트랜잭션 사용하기 ]
트랜잭션을 사용하기 위해서는 테이블을 create 시킬 때 테이블 타입을 BDB로 설정해야 한다. 일반적으로 테이블 타입을 선택하지 않을 경우는 MYISAM으로 만들어진다.

 

  1. 테이블 만들기
     mysql> create table test (
         -> num int(8) not null auto_increment,
         -> name varchar(20),
         -> primary key(num)
         -> ) type=BDB;
     Query OK, 0 rows affected (0.00 sec)

 

  2. 데이타 입력하기
     mysql> insert into test (name) values ('soma');
     Query OK, 1 row affected (0.00 sec)

 

  3. set autocommit=0 설정하기
    이 옵션은 변경된 데이타의 내용을 테이블에 바로 쓰지 않게 하기 위함이다.
    set autocommit=0 로 설정하면 commit 명령어를 내리기 전까지는 테이블에 적용 하지 않는다.
    rollback 명령어를 내리면 이전 값으로 되돌려 놓는다.
    Myisam 타입은 이 autocommit의 값이 0 이라도 변경된 값이 바로 테이블에 쓰여지게 된다.


    mysql> set autocommit = 0;
    Query OK, 0 rows affected (0.00 sec)

 

  4. begin 명령어 입력하기
    이 명령어는 트랜잭션을 시작한다는 것을 알린다.
    mysql> begin;
    Query OK, 0 rows affected (0.00 sec)

 

  5. UPDATE 시키기
    mysql> update test set name = 'jeje' where num = '1';
    Query OK, 1 row affected (0.00 sec)
    일치하는 Rows : 1개 변경됨: 1개  경고: 0개

 

  6. 확인하기
    mysql> select * from test;
    +-----+------+
    | num | name |
    +-----+------+
    |     1 | jeje   |
    +-----+------+
    1 row in set (0.00 sec)

 

  7. ROLLBACK 사용하기
    mysql> rollback;
    Query OK, 0 rows affected (0.00 sec)

 

  8. 확인하기
    mysql> select * from test;
    +-----+------+
    | num | name |
    +-----+------+
    |     1 | soma |
    +-----+------+
    1 row in set (0.00 sec)

 

  9. COMMIT 사용하기
    mysql> update test set name = 'jeje';
    Query OK, 1 row affected (0.00 sec) 
    일치하는 Rows : 1개 변경됨: 1개  경고: 0개


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


    mysql> select * from test;
    +-----+------+
    | num | name |
    +-----+------+
    |     1 | jeje   |
    +-----+------+
    1 row in set (0.00 sec)


    변경된 값을 테이블에 쓰기 위해서는 COMMIT 이라는 명령어를 사용해야 한다.
    되돌리고 싶을 때는 ROLLBACK 명령어를 사용하면 된다.

 

 

만약 하나의 DB 서버에 여러 사용자가 접속을 하여 사용 할 경우,
이때 한 사용자 트랜잭션을 수행하고 있을 때 다른 사용자가 트랜잭션을 수행하는 테이블에 어떠한 요청을 하였다고 가정하자. 그럼 어떠한 문제가 발생할까?
트랜잭션이 수행되고 있는 테이블에 다른 사용자가 요청을 하게 되면 COMMIT 이나 ROLLBACK 명령어가 수행되기 전까지 대기상태로 남아있게 된다.
COMMIT 이나 ROLLBACK 명령어가 떨어지면 해당 요청에 대한 결과값을 보여주게 된다.

 

| |


      1 page / 3 page
번 호 카테고리 제 목 이름 조회수
72 DATABASE db .. dbeaver, db admin tool 바다아이 228
71 DATABASE postgresql SEQUENCE reset .... 바다아이 338
70 DATABASE mysql, mariadb , , , , left, substring, right, concat 바다아이 657
69 DATABASE [PostgreSql] WITH , , Operator 바다아이 440
68 DATABASE postgresql for, foreach , 바다아이 466
67 DATABASE postgresql , , into ... 바다아이 433
66 DATABASE postgresql PL/pgSQL - SQL Procedural Language, , 바다아이 1771
65 DATABASE postgresql ... .. 바다아이 514
64 DATABASE postgresql CSV export/import 바다아이 576
63 DATABASE postgresql tablespace , .... 바다아이 650
62 DATABASE postgresql 10 partitioning, ... , ... 바다아이 495
61 DATABASE Using PostgreSQL Arrays, ... ... 바다아이 553
60 DATABASE PostgreSQL (TRIGGER) (function) 바다아이 546
59 DATABASE mysql, mariadb DISTINCT GROUP BY 바다아이 523
58 DATABASE Optimize and Improve PostgreSQL Performance with VACUUM, ANALYZE, and REINDEX 바다아이 552
57 DATABASE postgresql tuple . vacuumdb .. , . 바다아이 569
56 DATABASE RDBMS SQL MONGODB ... 바다아이 512
55 DATABASE mysql 5.x my.cnf 바다아이 702
54 DATABASE postgresql , .. 바다아이 794
53 DATABASE postgresql , size, 바다아이 913
52 DATABASE postgresql , , .... 바다아이 705
51 DATABASE PostgreSQL Replication, , , master, slave 바다아이 867
50 DATABASE postgresql case 바다아이 740
49 DATABASE postgresql with 바다아이 695
48 DATABASE postgresql , , string 바다아이 809
47 DATABASE / SELECT , 바다아이 776
46 DATABASE Postgresql partitioning table , , , 바다아이 832
45 DATABASE PostgreSQL 바다아이 957
44 DATABASE postgresql vacuumdb, psql, pg_dump password crontab 바다아이 1060
43 DATABASE postgresql sequence 퀀 auto_increment . 바다아이 1455
| |






Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : New Jersey  실행시간 : 0.03217
to webmaster... gogo sea. gogo sea.