롤백하지 않으면 여전히 변경 사항이 적용됩니까? 해 보겠습니다. begin tran update

검색어를 실행한다고 가정 해 보겠습니다.

begin tran

update users
set name = 'Jimmy'
where name = 'john'

트랜잭션을 롤백 하지 않으면 이러한 변경 사항이 계속 적용되거나 오류가 발생하거나 롤백 역할을합니까?



답변

트랜잭션이 무엇인지 이해해야 합니다. 단일 작업 단위입니다. ALL 또는 NOTHING ( ACID 특성을 따름 )이며 데이터베이스 일관성을 보장합니다.

트랜잭션을 롤백하지 않으면 이러한 변경 사항이 계속 적용됩니까?

커밋 한 경우에만 변경됩니다. SQL Server는 트랜잭션 로그에 대한 모든 변경 사항을 기록하고 커밋하면 데이터 파일로 강화됩니다.

당신이 볼 수있는 – 커밋하지 않는 경우, 다음 트랜잭션이 무기한 OPEN 유지됩니다 sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactions또는 사용 DBCC OPENTRAN.

또한 시작한 것은 명시 적 트랜잭션 이며 COMMIT 또는 ROLLBACK 문으로 명시 적으로 종료해야합니다.

또한 읽기- 항상 거래를 만드는 것이 나쁜 습관입니까?


답변

트랜잭션을 커밋하거나 롤백하지 않으면 트랜잭션은 계속 존재합니다. a commit또는 a 를 통해 트랜잭션을 종료 rollback하거나 DBA가 와서 세션을 종료 할 때까지 (또는 네트워크 딸꾹질과 같은 것으로 인해 연결이 실패 할 때까지) 잠금을 계속 유지하여 다른 세션을 차단할 수 있습니다 . DBA가 세션을 종료하면이 트랜잭션 및 기타 열린 트랜잭션에 대한 롤백을 내재적으로 발행합니다.


답변

트랜잭션이 커밋 될 때까지, 그리고 위에서 언급 한대로 전부 또는 아무것도 대답하지 않으면 변경되지 않습니다.

원 자성이이 뒤에있는 이유이며, 데이터베이스 시스템이 따르는 기본 특성 인 ACID 트랜잭션 특성을 확인할 수 있습니다.