• ベストアンサー

ロールバックが動作しない。

ロールバックが動作しない。 以下の文をSQLクライアントで実行するとテーブルに登録されてないはずなのですが、 なぜか登録されています。解決方法を教えてください。 ---------------------------------------------- SET AUTOCOMMIT=0; begin; INSERT INTO テーブル (カラム)VALUES ('AAA'); rollback; -----------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんばんは。 テーブルのエンジンは? まさかMyISAMでやろうとしてるんじゃ・・・? トランザクションが使用できるエンジンを使わないと駄目です(InnoDBとか)。

その他の回答 (4)

回答No.5

クエリにトランザクション命令渡してないとかっていうことはありませんか? mysql_query("begin") mysql_query("rollback") mysql_query("commit") という感じで。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

うまくセッションが引き継がれてないのでは? 単発のSQLを実行すれば当然ロールバックもなにもなく オートコミットされると思いますが・・・ こんな感じでcccやdddがロールバックされないなら抜本的に 設定がおかしいと思いますが・・・ CREATE TABLE hoge(id int PRIMARY KEY NOT NULL AUTO_INCREMENT,data varchar(30)) TYPE=InnoDB; SET AUTOCOMMIT=0; BEGIN; INSERT INTO hoge(data)VALUES ('aaa'); INSERT INTO hoge(data)VALUES ('bbb'); COMMIT; BEGIN; INSERT INTO hoge(data)VALUES ('ccc'); INSERT INTO hoge(data)VALUES ('ddd'); ROLLBACK; BEGIN; INSERT INTO hoge(data)VALUES ('eee'); INSERT INTO hoge(data)VALUES ('fff'); COMMIT; SELECT * FROM hoge;

  • hardgeek
  • ベストアンサー率50% (7/14)
回答No.3

既に他の方が回答されていますが、MyISAMではロールバックができません。 そもそもMySQLにはストレージエンジンというものがあり、テーブルごとにストレージエンジンを指定することができるのですが、ストレージエンジンにはトランザクションに対応したものとそうでないものがあります。ロールバックが効かないということは、トランザクション非対応のストレージエンジンを利用されているのではないかと考えられます。 MySQLの代表的なストレージエンジンにはMyISAMとInnoDBがあり、前者がトランザクション非対応、後者はトランザクション対応です。恐らくMyISAMが使われているのでしょう。テーブルのストレージエンジンを確認するには、 mysql> SHOW CREATE TABLE テーブル名\G または mysql> SHOW TABLE STATUS; というコマンドを実行しましょう。ストレージエンジンを変更するには、 mysql> ALTER TABLE テーブル名 ENGINE=InnoDB; という具合にコマンドを実行してください。 ただし、ここで注意しなければいけないのは、ストレージエンジンを変更するということは、テーブルの性質が変わってしまうことを意味しますので、アプリケーション側の挙動を変更する必要が出てくるということです。もちろんあまり手を加えなくてもいい場合もありますが、トランザクション対応と非対応ではアプリケーション側の対応も変わります。詳しいことは参考URLを見てください。

参考URL:
http://nippondanji.blogspot.com/2009/02/myisaminnodb.html
drago_cyber
質問者

補足

MyISAMになっておりました。InnoDBに変更してみました。 ですが、やはりロールバックできません。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

バージョンとエンジンは?

drago_cyber
質問者

補足

失礼しました。 XAMPP 1.7.3の MySQL 5.1.41を使用しています。

関連するQ&A