이필호 님이 쓰신 글 :
: 안녕하세요 이필호입니다.
:
: 말씀하신것은 반박하려고 프로그램으로 만들었습니다.
:
: 그리고 그 프로그램을 여러개 띄워서 실행해본결과...
:
: 제가 잘 못알았군요... ㅜ.ㅜ;;
:
: 제가 본 바로는 한 프로그램이 트랜젝션을 생성해서 그 트랜젝션을 계속해서 쓰는 한은 다른 프로그램에서 그 트랜젝션에 관한 적용을 전혀 알수가 없어서 키가 충돌나는군요.
:
: 이렇게 되면 Interbase로 정확한 혹은 실시간 통계를 위해서 max(), min() 값을 믿을수 없는 결론에 이릅니다.
:
: 즉, 멀티 사용자인 경우 모든 사용자가 트렌젝션을 종료해야지만 정확한 값을 알수 있다는 이야긴데요.. 정말 이상하군요..
인터베이스는 다른 DBMS와 아키텍쳐 자체가 다릅니다.
M$-SQL과 같은 락킹(locking) DB와 달리, 인터베이스는 버저닝(versioning)이라는 아키텍쳐를 사용해서 데드락 발생을 줄이는 방법을 사용합니다.
이 게시판에도 이와 관련해서 임프님이 쓰신 글이 있고요,
http://firebird.borlandforum.com/impboard/impboard.dll?action=read&db=fb_qna&no=124
좀 더 자세한 내용은
http://community.borland.com/article/0,1410,23216,00.html
에 있는 "InterBase: What Sets It Apart" 라는 글을 읽어보세요.
이러한 버저닝 DB로서의 특징을 이해하시고, 이에 맞게 처리를 하셔야 합니다.
그러므로 일단 트랜잭션을 커밋(TIBTransation::Commit 또는 TIBTransation::CommitRetaining)하신 후, min(), max()를 계산하셔야겠죠.
: 하여간 결론적으로는 제가 팁을 정확하게 테스트 안해본 결과군요..
:
: 저는 Sybase에서 터득한 SQL이기에 Interbase에서도 적용될줄알고 쓴 글이였는데..
:
: Interbase를 믿지 못하겠군요.. 음..
:
: 나름대로 MySQL과 비교도 안되게 잘 만든 RDBMS라고 생각했었는데 실망했습니다.
:
: 지적해주신 Tk님께 감사드립니다.
:
: PS.
: 그리고, Sybase 소스를 MS가 사서 독자적으로 개발한것이 MS SQL이 맞습니다.
: 그래서 Sybase용 함수와 MS SQL용 함수가 거의 비슷하고 또한 동장방법도 거의 비슷합니다.
: 참고하세요
:
:
: Tk 님이 쓰신 글 :
: : sysbase에선
: : insert into tbl (aaa, bbb) value ( (select max(aaa) + 1 from tbl), '123')
: : 이처럼 고유번호를 발번하셨는데?
: :
: : 이런 경우 인터베이스로 어떻게 진행 하셨는지요?
: : 물론 멀티유저 환경에서요. 인터베이스는 이런 문장 적용 안됨.
: :
: : 제가 sybase를 접해보질 못해서요.
: : 하지만. ms-sql두 이런 문장장이 적용이 됨다.
: : sysbase 개발자들과 ms-sql 개발자가 일부 동일 이란 사람이라, 아니 ms서 인수 했나?
: : 정확한 사정은 모르지만요
: : ms-sql인경우 insert시 순간적인 락이 발생되서.. 이런 문장이 적용됨다.
: : insert를 루프로 실행하는 동안.. select 한번 실행해보면.
: : insert완료될때까지 select에 결과는 나오질 못하는 결과를 봅니다.
: :
: : interbase에선 위와는 다른 결과 입니다. 봐로 진행됩니다.
: :
: : 그럼 interbase 사용자가 insert 할 시점에. 또다른 사용자가 insert 한다면요
: : 위와 같은 경우 어떻게 처리 해야되는지요?
: :
: :
: : 전 제네레이터 또는 트리거에 insert 하는 시점에 적용 합니다.
: : 트리거는 어떤 상황이든 지정한 테이블에 하나하나 입력될때 순차적으로 적용되니깐요
: :