2010-11-26 14 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を返します。

私は何が間違っていますか?なぜこれが起こるのですか?正しく動作させるためには何をすべきですか?

編集:私は、私はDebianのレニーのx86_64版に5.0.51と5.1.49の両方で試してみたstart transaction代わりのbegin

  • を使用する場合、同じ

    • は動作しません。

    回答:私は最初から以前のインストール(パージ)の完全な除去を含む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按分5.1.44に正確にそのコードは、その結果、あなたが期待しているを示す、ですか?どのプラットフォームですか?これらのコマンドはどうやって入力していますか?新しい接続で個々のコマンドを入力することは可能ですか?それはその行動を説明するかもしれない。

    +0

    有線! Debian Linux x86 \ _64に '5.0.51a-24 + lenny1-log'を付けて、同じ接続を使ってコマンドラインからmysqlを実行したときと同じようにタイプしました。 – Artyom

    +0

    私はバージョン' 5.1.49は依然として同じ結果である。 – Artyom

    +0

    Ok - データベースと設定を含むmysqlのインストールをすべて削除し、新しいものをインストールしました...これがうまくいきました。 @Artyom Odd。 – Artyom

    0

    あなたの ROLLBACKには文脈を持たせるために、 START TRANSACTIONまたは BEGINという文がありません。私はMySQLのインストールが壊れていた参照

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

    。あなたはそれを固定してうれしい!

    +0

    私は 'start transaction'、' begin'、 'START TRANSACTION WITH CONSISTENT SNAPSHOT'を同じように試しました。私はこのリンクを読んだが、何をすべきかをまだ分かっていない。サンプルをお願いしますか? – Artyom

    +0

    また、私が与えたコードで 'begin'を付けましたか? – Artyom

    関連する問題