2012-01-22 2 views
0

다음 쿼리 업데이트는 항상 테이블 데이터를 변경하지 않고 그대로 둡니까?병행 테이블 업데이트

update mytable set column1 = column1 

업데이트가 손실 될 경우 궁금한 점이 있으십니까?

처음에는 column1의 값은 oldValue입니다. 두 개의 트랜잭션 (t1과 t2)이 있고 t2는 t1 중간에 시작됩니다.

t1: update mytable set column1 = 'newValue' 

t2: update mytable set column1 = column1 

T2 트랜잭션을 시작으로 나중에 T1보다가 나중에 T1보다 마쳤다.

질문 : column1에 어떤 값이 할당됩니까?

+0

아, 물어보기 전에 확인해야했습니다. 두 번째 트랜잭션은 첫 번째 트랜잭션이 커밋되거나 롤백 될 때까지 차단됩니다. 그래서 나는 그 쿼리가 결코 테이블 데이터를 변경하지 않는다고 가정합니다. –

답변

1

트랜잭션 격리 수준은 다른 트랜잭션을 격리시키는 것이며, 읽기 커밋 또는 높은 격리 수준을 사용하면 아무런 문제가 없습니다.

첫 번째 쿼리가 "읽기 커밋되지 않은"격리 수준을 사용하는 경우에도 오라클의 레코드를 업데이트하지 않는다는 것을 알고 있습니다.