안녕하세요 이필호입니다.
말씀하신것은 반박하려고 프로그램으로 만들었습니다.
그리고 그 프로그램을 여러개 띄워서 실행해본결과...
제가 잘 못알았군요... ㅜ.ㅜ;;
제가 본 바로는 한 프로그램이 트랜젝션을 생성해서 그 트랜젝션을 계속해서 쓰는 한은 다른 프로그램에서 그 트랜젝션에 관한 적용을 전혀 알수가 없어서 키가 충돌나는군요.
이렇게 되면 Interbase로 정확한 혹은 실시간 통계를 위해서 max(), min() 값을 믿을수 없는 결론에 이릅니다.
즉, 멀티 사용자인 경우 모든 사용자가 트렌젝션을 종료해야지만 정확한 값을 알수 있다는 이야긴데요.. 정말 이상하군요..
하여간 결론적으로는 제가 팁을 정확하게 테스트 안해본 결과군요..
저는 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 하는 시점에 적용 합니다.
: 트리거는 어떤 상황이든 지정한 테이블에 하나하나 입력될때 순차적으로 적용되니깐요
:
:
:
:
:
:
|