> 롤백 사용을 피하기 위해 다음의 전략을 사용할 수 있다:
>
> 1. 접근하기 원하는 모든 테이블에 락을 사용. LOCK TABLES ...
> 2. 조건 테스트(Test conditions)
> 3. 모든 것이 제대로 된다면 업데이트를 한다.
> 4. UNLOCK TABLES
>
> ---------------------------------
> 위 방법은 Commit을 수행하는 방법에 대해서 설명이 되어 있습니다.
> 그런데 롤백을 구현하는 방법에 대한 설명이 빠진것 같습니다.
> 3번에서 제대로 안된다면 단지 업데이트를 안하고 unlock시키면 되는 것인
> 지 언급이 빠져 있습니다.
> 또한 제대로 수행이 되지 않고 에러를 발생한다면 어떻게 인지할수 있는지
> 잘 모르겠습니다.
>
> '업데이트를 한다'는 의미가 자기 자신을 업데이트 한다는 것인지
> 아니면 슬레이브로 데이터 베이스를 작동시키고 그곳에 업데이트를 해야하
> 는 것인지 모르겠습니다.
> 개념적인 부분에서 좀 혼동이 와서 질문드립니다.
> 답변 부탁드립니다.
>
흠. 이해가 가지 않는군요.
MySQL에서는 rollback을 한다는 것은 어불성설입니다.
원래 디비에서 한 작업을 할때 transaction이 지원되는 경우에는 rollback과 commit을 최후의 순간에 결정할 수 있습니다.
하지만 mysql의 경우 기본적으로 transaction을 지원하지 않기 때문에 rollback과 commit이라는 것이 존재하지 않습니다.
그러므로 이것을 구현한다는 것 자체가 transaction을 구현하지 않는 이상은 있을수가 없는 일이지요.
MySQL은 기본정신이 빠른 속도입니다.
그러므로 transaction/foreign key/rule system 등 속도 저하를 가져 올수 있는 많은 부분을 포기한 상태입니다.
위에서 구현한 rollback 이라고 하는 것은 그냥 작업시 다른 사용자의 접근을 막고 사용자의 작업이 하나의 atomic operation이 가능해 지도록 보장하는 것에 불과 할뿐 절대로 rollback과는 상관이 없는 얘기입니다.
|