롤백하지 않으면 여전히 변경 사항이 적용됩니까?


10

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

begin tran

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

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


이 문장을 실행하는 데 사용하는 클라이언트 소프트웨어의 동작이나 포함 된 응용 프로그램에 따라 다릅니다. 일부는 구성된 경우 자동 커밋 할 수 있습니다 (SSMS는 기본적으로이를 수행함).
mustaccio

3
명시 적으로 선언 된 트랜잭션은 자동 커밋되지 않습니다. Josh가 거래 시작을 선언했기 때문에 Justin Cave가 답변 한대로 정확하게 작동합니다.
Dave

답변:


16

트랜잭션이 무엇인지 이해해야 합니다. 단일 작업 단위입니다. 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 문으로 명시 적으로 종료해야합니다.

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


@JoshStevenson 데이터베이스 컨텍스트에서 Atomic Operations 에 대해 읽는 동안 가치가 있다고 생각합니다 .
Nelz

12

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


이것이 정답입니다. 이 정보가 없으면 COMMIT 및 ROLLBACK 문을 모두 사용하는 것이 의미가 없습니다.
Tarec

1

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.