
No.2ベストアンサー
- 回答日時:
こんばんは。
テーブルのエンジンは?
まさかMyISAMでやろうとしてるんじゃ・・・?
トランザクションが使用できるエンジンを使わないと駄目です(InnoDBとか)。
No.5
- 回答日時:
クエリにトランザクション命令渡してないとかっていうことはありませんか?
mysql_query("begin")
mysql_query("rollback")
mysql_query("commit")
という感じで。
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;
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/myisamin …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLです教えてください。
-
エラー 1068 (42000): 複数の主...
-
テーブル名が可変の場合のクエ...
-
【初歩】ラジオボタンをつかっ...
-
mysqlがインストールされている...
-
#1062 - '0' は索引 'PRIMARY' ...
-
MAMP 99ドル約1.6万円 高い...
-
htmlコードで書かれた表にphpで...
-
`picture` varchar(255) のコマ...
-
SQLでカラムを追加し、条件に合...
-
履歴情報のデータベース設計に...
-
同一日に複数レコードがある場...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ロックテーブルサイズ超えのエ...
-
mysqlでCSVインポートでトラン...
-
SELECT実行中にINSERTしたい
-
MySQL 肥大化したテーブルへのI...
-
MySQL8にバージョンアップした...
-
AUTO_INCREMENTの抜け番
-
「テーブルに座って……」という...
-
一つ前に戻るには…
-
会社の飲み会の幹事になり、座...
-
SELECT 文の NULL列は?
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
外部キーだけのテーブル(主キ...
-
SQL、2つのテーブルで条件一致...
-
Accessでデータシートに同じデ...
-
テーブルに存在しない列をselec...
-
SQLでSUMなどの関数でデータが...
-
Oracleで上書きImportはできま...
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
おすすめ情報