MYSQL을 통해 innoDB 데이터베이스 엔진을 사용하고 있습니다. 서로의 밀리 초 내에 여러 트랜잭션이 발생하면 데이터베이스가 트랜잭션을 어떻게 실행합니까? 다음 트랜잭션을 실행하기 전에 한 번에 하나의 트랜잭션 만 허용하고 지연합니까?MYSQL은 어떻게 쿼리의 우선 순위를 결정합니까?
답변
별도의 연결은 트랜잭션이 동시에 실행될 수 있습니다. 트랜잭션이 진행됨에 따라 다양한 잠금 (mutex)이 획득됩니다. 어떤 경우 (동일한 행을 업데이트하는 두 개의 연결) 잠금은 다른 트랜잭션이 완료 될 때까지 하나의 트랜잭션을 차단합니다. 경우에 따라 "교착 상태"가 발생하고 하나의 트랜잭션이 롤백됩니다. 또 다른 경우에는 하나의 트랜잭션이 잠금을 기다리는 시간 초과가 발생합니다. (기본 시간은 50 초이며 거의 볼 수는 없습니다.)
잠금은 어떤 트랜잭션도 다른 트랜잭션을 방해하지 않고 트랜잭션을 "동시에"실행하도록 설계되었습니다.
InnoDB에서 모든 사용자 활동은 트랜잭션 내에서 발생합니다.
자동 커밋 모드이 활성화 된 경우 각 SQL 문은 하나의 트랜잭션을 자체적으로 형성합니다. 기본적으로 MySQL은 자동 연결이 활성화 된 상태에서 새로운 연결마다 세션을 시작하므로 MySQL은 각 명령문이 오류를 반환하지 않으면 커밋을 수행합니다. 명령문이 오류를 반환하면 커밋 또는 롤백 동작은 오류에 따라 다릅니다.
자동 커밋이 활성화 된 세션은 명시 적 START TRANSACTION 또는 BEGIN 문으로 시작하고 COMMIT 또는 ROLLBACK 문을 사용하여 종료함으로써 다중 명령문 트랜잭션을 수행 할 수 있습니다.
SET autocommit = 0 인 세션에서 자동 커밋 모드가 비활성화 된 경우 세션은 항상 트랜잭션을 엽니 다. COMMIT 또는 ROLLBACK 문은 현재 트랜잭션을 종료하고 새 트랜잭션이 시작됩니다. 오픈. COMMIT 또는 ROLLBACK 문은 현재 트랜잭션을 종료하고 새 트랜잭션이 시작됩니다.
자세히 알아보기 - http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
- 1. 테이블 우선 순위를 어떻게 결정합니까?
- 2. VxWorks는 인터럽트 반쪽의 우선 순위를 어떻게 결정합니까?
- 3. 어떻게 자녀의 순위를 결정합니까?
- 4. Ocaml은 사용자 정의 연산자의 우선 순위를 어떻게 결정합니까?
- 5. MySQL은 SELECT 우선 순위
- 6. MySQL에서 특정 쿼리의 우선 순위를 매기는 방법은 무엇입니까?
- 7. dependsOnMethods 및 우선 순위를 사용하는 TestNg가 우선 순위를 위반합니다.
- 8. 배치 파일 - 변수의 우선 순위를 어떻게 표시합니까?
- 9. playframework에서 어떻게 액터보다 우선 순위를 둡니까?
- 10. DispatcherTimer의 우선 순위를 어떻게 설정할 수 있습니까?
- 11. SQL 문에서 우선 순위를 어떻게 선언합니까?
- 12. 큐의 우선 순위를 높이십시오.
- 13. Windows에서 우선 순위를 높이시겠습니까?
- 14. 우선 순위 큐에서 우선 순위를 높이십시오.
- 15. Google App Engine에 대한 요청의 우선 순위는 어떻게 결정합니까?
- 16. PHP MySQL이 우선 순위를 선택
- 17. debian에서 우선 순위를 변경하려면 어떻게해야합니까?
- 18. SetWindowsHookEx 우선 순위를 보장하는 방법
- 19. Distinct SQL 쿼리의 우선 순위 지정
- 20. RelativeLayout의 : 뷰에 우선 순위를 부여하는
- 21. QProcess에서 우선 순위를 강제하는 방법
- 22. 어디에서 MySQL 우선 순위를 주문하십시오
- 23. 안드로이드에서 쓰레드 우선 순위를 낮추기
- 24. 작업 우선 순위를 얻는 방법
- 25. 주문 우선 순위를 유지하는 방법
- 26. 닷넷에서 스레드 우선 순위를 낮추십시오.
- 27. 리눅스에서 스레드의 우선 순위를 높입니다.
- 28. 문자열에서 문자 우선 순위를 지정해야합니다.
- 29. 쿼리의 각 절에 대한 우선 순위
- 30. 엔티티가 저장되었는지 어떻게 결정합니까?
단일 사용자 스레드는 MySQL에서 동기식입니다. 병행 동작의 경우 '태블릿'이 있습니다. – BlitZ
주제를 벗어나지 만 오히려 의견을 기반으로합니다. – EJP
글쎄 InnoDB는 로우 레벨 잠금을 지원하기 때문에 한 테이블의 다른 로우에 대한 변경은 사실상 동시에 (또는 그 밀리 초 이내에) 이루어질 수있다. – spaceman