강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

mySQL에서의 트랜잭션
작성자 : 13 김영철
등록날짜 : 2009.01.29 15:46
2,435
오늘은 mySQL에서 트랜잭션에 대해 알아보겠습니다.

트랜잭션의 의미는 '일, 업무의 단위'라는 뜻도 있지만,

여기서는 '내가 작업하는 공간'이라고 이해하시면 될 듯 싶습니다.



그럼 먼저 왜 트랜잭션이 필요한 지 알아보겠습니다.

여기 A라는 사용자와 B라는 사용자가 있다고 칩시다.

A라는 사용자가
mysql> SELECT mycol FROM mytb;



를 했을때

3



이라는 결과가 출력되었다고 치죠.

이 때 A라는 사용자는 3을 7로 바꾸고 싶어서

mysql> UPDATE mytb SET mycol=7;



이라는 명령을 내렸습니다.

그럼 A라는 사용자가 예상하고 있는 결과는 7일겁니다.

그래서 A라는 사용자는 7로 제대로 바뀌었는지 확인하려고 하는데....,

갑자기 '따르릉~~'

잠시 전화를 받게 되었습니다. 아마도 애인에게서 걸려온 전화인듯 하네요.


그런데 바로 그 순간!!!

돌연 다른 곳에서 접속한 B라는 사용자가 그만,

mysql> UPDATE mytb SET mycol=4;



라는 명령을 내리고 말았습니다.

애인과의 전화를 끊고 흐뭇한 마음으로 결과를 확인하던 A

mysql> SELECT mycol FROM mytb;



결과는...?

4 !



쿠궁.......!

A는 '내가 치맨가?'하고 생각하겠지요.

다시한번 확인해도 역시 결과는 마찬가지....

결국 A는 '이런..맘대로 변하는 DB를 어떻게 믿고 작업을 해!!!' 라며 새로운길을 찾아 떠났다고 합니다.



이 이야기에서 우리는 한가지 교훈을 얻을 수 있습니다.

'애인의 전화는 받지말자'

가 아니라

'내가 작업하는 동안 딴 사람이 작업을 못하게 할 필요가 있다'

입니다.

그래서 등장한것이 바로 트랜잭션 L.O.C.K T.A.B.L.E.S 입니다.

이 LOCK 이라는 것을 걸어놓으면 걸어놓는 동안은 다른 사용자가 작업을 못합니다.


LOCK에는 READ락과 WRITE락이 있습니다.

먼저 READ락을 볼까요?

mysql> LOCK TABLES mytb READ;



이렇게 명령을 내리면 mytb라는 테이블에대해 read락이 걸린겁니다.

이렇게되면 다른 창이나 외부에서 mytb에 대해 SELECT만이 가능하게됩니다.

B라는 다른 사용자가

mysql> SELECT mycol FROM mytb;



하면 결과가 나오지만

mysql> UPDATE mytb SET mycol=4;



해도 아무일도 안일어납니다. 이 때는 마지 시스템이 다운된것처럼 딱!! 멈춰버립니다.

A라는 사용자가

mysql> UNLOCK TABLES;



라고 명령을 내리면 멈춰있던 B라는 사용자에게 그제서야 '성공적으로 수정되었다'는 메세지가 나옵니다.

다시말해 LOCK을 걸고있는 동안에는 다른 사용자가 테이블에 변경을 할 수 없다는 것이지요.


자, 그런데 A라는 사용자가 이번에는 LOCK을 걸어놓고 작업하는 동안에는

결과를 SELECT로도 볼 수 없게 하고 싶습니다.

네 맞습니다. 그럴때 쓰는 것이 write락입니다.

mysql> LOCK TABLES mytb WRITE;



이렇게하면 B라는 사용자는 select도 못하고 변경도 못합니다.

A가

mysql> UNLOCK TABLES;



이렇게 할때까지 말이지요.

이제 트랜잭션이 이해가 되셨죠? 

[출처]  민주가인

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2805 Window Server 2003을 사용해 보자 M 최고의하루 12.20 2494
2804 Windows Server 2003 에서 IIS 6 + PHP 4.3.2 설정법 M 최고의하루 12.19 3959
2803 Windows Server 2003 완벽 재설치 M 최고의하루 12.19 3117
2802 SERVER 2003 섬네일(GD2) 기능 적용하기 M 최고의하루 12.18 2335
2801 윈도우2003 서버 SP1 환경에서 IIS에 php 설치 하기 M 최고의하루 12.18 2958
2800 PHP 4.4.3-dev, Zend 2.6.0, MySQL 4.0.26 버전 설치정보 M 최고의하루 12.04 2681
2799 Windows 2003 Server 설치 및 최적화 팁 모음 M 최고의하루 12.04 3242
2798 우편번호,주소 db 13 김영철 01.29 2366
2797 my-sql 을 좀 쉽게 다룰수 있는 프로그램입니다 13 김영철 01.29 2765
2796 Mysql 기본 사용법 13 김영철 01.29 2991
2795 mssql mysql 변환, asp 게시판 소스 수정 13 김영철 01.29 4832
2794 mysql함수 13 김영철 01.29 2628
열람중 mySQL에서의 트랜잭션 13 김영철 01.29 2436
2792 백업 및 복구 - 첫번째 13 김영철 01.29 2485
2791 백업 및 복구 - 두번째 13 김영철 01.29 2408
2790 사용자 및 권한 설정 13 김영철 01.29 2074
2789 [mysqld] Column Type => Timestamp 설정 13 김영철 01.29 2427
2788 MySQL, SQL문의 분류, Eclipse 셋팅, JDBC, 방명록 13 김영철 01.29 4120
2787 UNION 과 JOIN 의 차이점 13 김영철 01.29 2384
2786 mysql 한글 깨짐 13 김영철 01.29 3662
2785 Mysql 5.xxx 데몬 시작 및 중지 13 김영철 01.29 2588
2784 Mysql-5.0.37 설치 및 한글처리문제 13 김영철 01.29 2887
2783 윈도우 환경에서의 Mysql5 설치 및 설정방법 13 김영철 01.29 3231
2782 php5, mysql5.0 설치 13 김영철 01.29 2652
2781 mysql characterset 변경 13 김영철 01.29 2404
2780 Mysql 함수 총집합 13 김영철 01.29 3266
2779 Mysql 문자열 관련 함수 13 김영철 01.29 2734
2778 mysql 컬럼값 문자열 치환 - REPLACE() 13 김영철 01.29 2749
2777 Mysql 백업 하기 13 김영철 01.29 3129
2776 mysql 복구 13 김영철 01.29 2838
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취