2011-11-07 4 views
20

innoDB 테이블에서 트랜잭션 지원을 테스트하고 있었지만, 다소 혼란 스러움 때문에 MyIsam 테이블에서 동일한 트랜잭션을 실행하려고했지만 놀랍게도 효과가있었습니다. 나는 myIsam 테이블 쿼리가 하나의 원자 연산이 아닌 하나씩 실행되고 START TRANSACTION 및 COMMIT 및 ROLLBACK 연산에서 오류가 발생하지 않는다고 가정합니다. MyIsam 엔진이이 작업을 무시하는 것입니까 아니면 일부 작업을 수행합니까?MyIsam 엔진 트랜잭션 지원

+0

MySQL의 에서이 포스트를 읽을 수 있습니다 당신은 DML 문 또는 구문 오류를 얻을하지 않았다 롤백 할 수 있었던 것을 의미한다 "일"은? –

+0

간단한 select 및 insert 문을 수행했지만 오류가 발생하지 않았습니다. – Headshota

+2

그러면 @ Darhazer의 대답을 참조하십시오. 오류는 발생하지 않지만 실제로 거래하지는 않습니다. 'INSERT'는'ROLLBACK'을 발행 할 때 취소되지 않습니다. –

답변

26

MyISAM은 자동 커밋 모드 (트랜잭션 엔진이 아니기 때문에)에서 효과적으로 작동하며 커밋/롤백을 무시합니다.

실제로 스토리지 엔진은 SQL 구문 분석기와 분리 된 MySQL 아키텍처의 다른 계층이며 SQL 계층은 저수준 API를 사용하여 저장소 엔진과 통신하기 때문에 일반적인 SQL과 엔진이 서로 다른 추천의 하위 집합. 아키텍처에 대한 매우 높은 수준의 개요를 볼 수 있습니다. here

2

MyIsam 테이블은이 용도로 설계되지 않았습니다. 5+ 버전조차도. 그것은 단지 데이터를 저장하기위한 것입니다. 그것은 당신에게 거래 나 데이터 복구를 보장하지 않습니다. 이것을 위해 InnoDB를 사용해야하며, 필요한 경우 MyIsam을 복제 목적으로 사용해야합니다 (크로스 테이블 검사가 없으므로 MyIsam 테이블로 데이터를 검색하는 것이 더 빠릅니다).

당신은 http://forums.mysql.com/read.php?21,68686,69229#msg-69229

관련 문제