• 締切済み

mySQL(トランザクション)

こちら、mySQL(3.22.23b)を使う予定ですが、 ある書籍には、トランザクションは、  MySQL3.23.x以上でサポートされるように なりましたとありますが、これは事実でしょうか?

  • aeic
  • お礼率10% (60/582)

みんなの回答

  • shibata2
  • ベストアンサー率10% (1/10)
回答No.1

私の手元にある書籍は推奨バージョンが2.23、開発バージョンが3.23の時点のものです。 3.22では 「MySQLはトランザクション管理をサポートしない。」 ときっぱり書いてありますね。 3.23での主な変更点として挙げられている中にはトランザクション管理はないですね。 ただし「MySQLの開発チームはトランザクションの開発を開始しており低レベルでは動作し始めている。」 とも書いてあります。 最新情報は参考URLにあるはずですが英語ばっかなんでよくわかりません。

参考URL:
http://www.softagency.co.jp/MySQL/

関連するQ&A

  • MySQLのトランザクションについて

    WEBアプリ上の、MySQLのトランザクションについて質問です。 トランザクションは、データの挿入に矛盾がない場合commitすることによって データの挿入等を確定する機構だとおもいますが、 この仕組みって、トランザクション中は作業対象のテーブルは実行中のクライアント以外 アクセスできなくなる(※つまりロック?がかかっている?)のでしょうか? そうじゃないと、意味がないですよね?やっぱり。。。 また仮にですが、例えばAというクライアントがWEBサイトにアクセス中に Bというクライアントが待ったく 同じ動作を同じタイミングでアクセスした場合ってどうなるのでしょうか? 実際、WEBアプリでそこまでの例外というか処理って行うものでしょうか? また、ちなみにMySQLの場合、 "START TRANSACTION" というSQL文だけでなく AUTOCOMMIT = 0 として、自動コミットをオフにしつつ beginという式で トランザクションを開始する方法があるようですが、実際はどちらの方が当たり前のほうほうなのでしょうか? 識者の方ご教授ください。

    • ベストアンサー
    • MySQL
  • トランザクションのネストについて

    トランザクションのネストについて お世話になります。 今、ストアドの中でストアドを実行するようなSQLを作成しているのですが、 このときのトランザクション処理について教えていただきたいです。 簡単な流れとしましては Aトランザクション開始(大枠のストアド) ↓ 処理a  ↓  Bトランザクション開始  ↓  (Aストアドの中のストアド実行)  ↓  Bコミット  ↓ 処理b ↓ Aコミット といった感じなのですが、BストアドでコミットするとBストアドをCALLする前の処理aが コミットされてしまいます。 ここはBはBだけでコミットされてほしいのです。 独自で調べた限りでは、「トランザクションのネストはMySQLではできない」ということらしいのですが、 こういった場合、どのようにしたらよいのでしょうか。 もし方法があれば、ご教示のほどお願い致します。 -環境- [DB MySQL 5.0] [OS Windows XP]

    • ベストアンサー
    • MySQL
  • MYSQLのトランザクションについて質問です!

    すいません!表題の件で3点質問させてください。 質問1 MySQLの5.0.51を使っていますが、 トランザクションって、どのテーブルが対象なんでしょうか? 例えば、START TRANSACTION とかで開始したりすると、 データベース内のinnoDBのテーブルは、 すべてが対象となるんでしょうか? それとも、readとかwriteとかして 1つづつ指定しないといけないんでしょうか? 質問2 トランザクションすると、 もしやテーブルって、 自動的にreadロックやwriteロック設定された状態になるのでしょうか? 質問3 readロックやwriteロックですが、 書き込み禁止って、どちらなのでしょう? 今まで、ずっとreadロックと勝手に思っていたのですが、 私のMySQLコマンドブック読んでると、 writeロックのような気がしてきたので、 確認のためです… 超愚問、どなたかお付き合いよろしくお願いしますm(__)m

    • ベストアンサー
    • MySQL
  • mysqlでCSVインポートでトランザクション管理出来る

    只今、mysqlを使用して開発しております。 行き詰まっておりまして 大変申し訳ありませんが、ご教授の程、よろしくお願いいたします。 要件は以下になります。 ・CSVファイルデータをインポートする。 ・CSVファイルは複数なので、全ての処理が終わった段階でコミット・もしくはロールバックする。 (トランザクション管理が出来ればよいです。) ※LOAD DATA INFILEでトランザクション管理しようとしたのですが LAODのトランザクション管理は5.1系じゃないと出来ないようですので、 出来ませんでした。 mysqlのバージョン :5.0.24

    • ベストアンサー
    • MySQL
  • トランザクション処理について

    質問させて下さい。 以下の処理を行なっております。 1. トランザクション処理開始 2. テーブルAからデータをDELETE 3. テーブルBへデータをINSERT 4. トランザクション処理終了 上記処理の場合の「TYPE=InnoDB」指定の仕方が不安です。 現在はロールバックの可能性のあるテーブルAのみ「TYPE=InnoDB」を指定しています。 その状態でコミットもうまくいっているのですが、テーブルBに「TYPE=InnoDB」を 指定しなくてもよいものなのでしょうか。 環境 MySql 4.0.24

    • ベストアンサー
    • MySQL
  • 同一ユーザーが同時アクセスした時のトランザクション

    PHPとMySQLでWEBアプリを作っています。 複数の人がログインしてデータの書き換えが発生するので、トランザクションを扱いたいと考えています。 サイトや書籍を見て基礎はとりあえず頭に入ったのですが、自分の作っているアプリで一般的にどうやればいいのかピンときていません。 そこでいくつか疑問があるのですが、今回的を一つに絞って質問します。 質問 「同じアカウントのユーザーが別々のブラウザから同時にアクセスしてきても問題が無いようにする一般的なトランザクション処理の方法が知りたい」 現在既に出来ているアプリの流れが以下です。(かなり簡略化しています) <?php  始めにMySQLでユーザー情報の読み込み  MySQLでいろんな情報の読み込み  phpでいろんな処理  MySQLでいろんな情報の書き込み  (上記の一連の処理は何回も出てくる)  最後にMySQLでユーザー情報の書き込み ?> 書籍やサイトに載っているトランザクションの例だと、読み込みと書き込みの一連の流れが連続しているので単純にSTART TRANSACTIONしてCOMMITしている場合が多いです。 しかしこのアプリの場合ユーザー情報の読み込みと書き込みに間が空いているので、この間をSTART TRANSACTIONとCOMMITで挟む、というのはかなりおかしい気もします。 このような場合に同一アカウントからの同時アクセスでも整合性を保つにはどうやるのが一般的なのでしょうか。 根本的にphpプログラムとしてデザインが間違っているのかもしれませんが、あくまでMySQLのトランザクション処理での解決を目指している(もうプログラムはほぼ完成している)ので、MySQLのカテゴリで質問しました。でもそういう指摘もしてもらえるとありがたいです。 (ちなみにこのようなことはあくまでそういうアクセスをしてくる人のまれな状況のための対処であり、頻度としては高くないと思っていますがまずは最初の疑問としてあげました)

    • ベストアンサー
    • MySQL
  • トランザクションについて

    MySQLバージョン4.1.16を使っています。 トランザクションは2つに分けて行う場合と1つで済ませる場合とでは どちらが良い悪いなど違いはあるのでしょうか? できれば1つで済ませれば良いのでしょうが、 2つに分けなければいけない状態の時に、何か注意する点など出てくるのでしょうか? START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; COMMIT; START TRANSACTION; UPDATE table2 SET b=1 WHERE type=1; COMMIT; それか START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; UPDATE table2 SET b=1 WHERE type=1; COMMIT;

    • ベストアンサー
    • MySQL
  • MySQLのトランザクションについて

    初めて質問します。 今、PerlのDBIを使ってMySQLのトランザクション処理にチャレンジしています。 ところが、rollback処理がうまくできません。 具体的には、 table2 がある状態で下のプログラムを動かすと、 エラーの表示が出るのに、 table1 は作成されました。 何らかのエラーがあれば、どちらも作成されないようにしたいです。 ======================================================= my %sql; $sql{db_name} = "database"; $sql{host} = "localhost"; $sql{user_name} = "user_name"; $sql{password} = "password"; use DBI; my $dbh = DBI->connect('DBI:mysql:'.$sql{db_name}.':'.$sql{host}, $sql{user_name}, $sql{password} ,{RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || &Err(); my $sth; my $re; eval { my $sql_string1 = "create table table1(`id` int);"; my $sql_string2 = "create table table2(`id` int);"; $sth = $dbh->prepare($sql_string1); $re = $sth->execute; $sth = $dbh->prepare($sql_string2); $re = $sth->execute; }; if ($@) { $tag="Err:".$@."\n"; $sth = $dbh->rollback; }else{ $sth = $dbh->commit; } $sth->finish; $dbh->disconnect; ======================================================= 検索して、いろいろいじっても解決しませんでした。 どうかよろしくお願いします。

    • ベストアンサー
    • Perl
  • トランザクションの利用

    はじめて質問させていただきます。 PHP4.4 + MYSQL5でinnoDBを利用したトランザクション処理の勉強をしたいのですが、オープンソースやフリーのスクリプトで参考になるようなものはないでしょうか。いろいろ見たのですがMYISAMがほとんどで・・。 トランザクション処理の概念は分かるのですが、いざPHPでその動作を実現しようとしても、どうやれば良いのかがわかりません。 BEGINで始まりCOMMITで終わるのは分かるのですが、PHPでどのように書けば良いのでしょう。 参考になるスクリプトやサイトがあれば教えていただきたいです。

    • ベストアンサー
    • MySQL
  • MySQLとPHPのトランザクションについて

    MySQLとPHPのトランザクションを利用して不整合対策を行う場合、下記のような例になるかと思いますが、 $dbh->beginTransaction(); try { }catch(PDOException $e){ $dbh->rollback(); } try { }catchの中で、PHP側での演算の判定を入れて、エラーの場合、ロールバックをさせるような使用方法は可能でしょうか? 例えば、 1.SELECTで現在の上限数を取得 2.PHPで上限数と比較 3.上限数を超えていない場合は、INSERTを流す 4.上限数を超えている場合は、エラーでロールバック のように、上限数が決まっている処理において、 2と3の処理の際に起こり得る不整合をなくしたいと考えています。

    • ベストアンサー
    • PHP