2010-11-26 3 views
1

InnoDB 엔진을 사용할 때 다음 트랜잭션이 롤백되지 않는 이유는 무엇입니까?MySQL/InnoDB에서 트랜잭션이 롤백되지 않습니다.

create table test (i integer) Engine = InnoDB; 
begin; 
insert into test(i) values(10); 
insert into test(i) values(20); 
rollback; 
select count(*) from test; 

은 0 대신 2를 반환합니다!

무엇이 놓치나요? 왜 이런 일이 생길까요? 제대로 작동하려면 어떻게해야합니까?

편집 : 내가 대신 내가 데비안 레니의 x86_64의에 모두 5.0.51 및 5.1.49와 시도했습니다 begin

  • start transaction를 사용하는 경우 작동하지 않습니다 같은

    • .

    답 : 나는 처음부터 이전 설치 (제거)의 완전 제거를 포함하여 DB를 다시 설치 한

    - 처음부터 다시 설치.

    이제 작동합니다.

    누가 잘못되었는지 설명해 주시면 매우 기쁩니다.

  • +0

    'START TRANSACTION'은 어디에 있습니까? –

    답변

    1

    코드에 문제가 있다고 생각하지 않습니다.

    mysql> create table test (i integer) Engine = InnoDB; 
    Query OK, 0 rows affected (0.10 sec) 
    
    mysql> begin; 
    Query OK, 0 rows affected (0.00 sec) 
    
    mysql> insert into test(i) values(10); 
    Query OK, 1 row affected (0.01 sec) 
    
    mysql> insert into test(i) values(20); 
    Query OK, 1 row affected (0.00 sec) 
    
    mysql> rollback; 
    Query OK, 0 rows affected (0.00 sec) 
    
    mysql> select count(*) from test; 
    +----------+ 
    | count(*) | 
    +----------+ 
    |  0 | 
    +----------+ 
    1 row in set (0.01 sec) 
    
    mysql> 
    

    사용하고있는 MySQL의 어떤 버전 : 여기 Mac에서 MySQL의 버전 14.14 DISTRIB 5.1.44에 정확히 코드는 결과는 기대하고을 보여주는입니까? 어떤 플랫폼? 어떻게 그 명령을 입력합니까? 새 연결에서 각각의 개별 명령을 입력 할 수 있습니까? 예를 들면? 그것은 행동을 설명 할 수 있습니다.

    +0

    유선! 'select version()'은 데비안 리눅스 x86 \ _64에서'5.0.51a-24 + lenny1-log'를주고, 똑같은 연결을 사용하여 명령 행에서 mysql을 실행했을 때와 똑같이 타이핑했습니다. – Artyom

    +0

    버전' 5.1.49는 여전히 같은 결과이다. – Artyom

    +0

    Ok - 데이터베이스와 설정을 포함한 mysql 설치를 alll 제거하고 새로운 것을 설치했습니다 ... 이제 작동합니다. – Artyom

    0

    ROLLBACK에 문맥이 있어야 문이 누락되었습니다 ( START TRANSACTION 또는 BEGIN).

    http://dev.mysql.com/doc/refman/5.0/en/commit.html

    나는 당신의 MySQL 설치가 부서졌다 참조하십시오. 당신이 고칠 다행!

    +0

    나는'start transaction','begin','START TRANSACTION WITH CONSISTENT SNAPSHOT'을 모두 시도해 보았습니다. 나는이 링크를 읽었지만 여전히 무엇을해야 할지를 알 수 없다. 견본을 주시겠습니까? – Artyom

    +0

    또한 내가 준 코드에서'begin'을주었습니다. – Artyom

    관련 문제