• 締切済み

なぜ?更新されたのにデータが変わらないのは??

ajaxとphpとdbを使ってマウスで自由な場所に移動できるエディターを作ってます。 で、なぜか更新が失敗してしまい一つずつ切り分けて確認していったところ、DBの update文が実行するまでは正常に動いております。 変数の中身もechoで確認済みで更新したいデータはちゃんと入っております。 条件があっているので正常に動きましたとの結果も出ております。 ですが、更新させたいデータが変数に入っているにも関わらず肝心の更新したい場所が 更新されない事があります。 同じ手順でやっているため正常に動いてないことがあるのは確かです!! エディターなので更新機能をつけているのでそこからupdateさせればいいのですが、 あまりも頻度が多いのでこれはまずいと思って考えてはいますが、原因はどこだろうと 考えてばかりで答えが出せません。 googleの検証を使っているのですが、あれが正常に動いていない可能性はあるのでしょうか? 正常に動いているとしたらmysqlのupdate文に更新されない不具合があるということでしょうか? 更新されなかった場合の方法としては二重更新しか対応が思いつきませんが、適切な方法で 他のやり方はございますでしょうか。 大変お手数ですが、ご教示よろしくお願いします。

みんなの回答

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.2

MySQL は、デフォルトで新しい接続のセッション開始時に自動コミットモードが有効になります。そのため、各 SQL ステートメントからエラーが返されなかった場合に、MySQL はそのステートメントのあとでコミットを実行します。ステートメントからエラーが返された場合、コミットまたはロールバックの動作はそのエラーによって異なります。セクション14.19.4「InnoDB のエラー処理」を参照してください。 自動コミットが無効になっているセッションが、最後のトランザクションを明示的にコミットせずに終了した場合、MySQL はそのトランザクションをロールバックします。 https://dev.mysql.com/doc/refman/5.6/ja/innodb-implicit-commit.html

すると、全ての回答が全文表示されます。
  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

データベースはUPDATEで更新完了ではないのです。 UPDATEしたあと、COMMITの操作が必要です。 UPDATEやINSERT、DELETEは仮押さえなのです。 すべての更新が正常であればCOMMIT(本登録)、 どこかに異常があればROLLBACK(仮押さえをキャンセル)する事になります。 明示的にCOMMITしていない場合、プログラム終了でROLLBACKされることがあります。 (データベースの設定によりCOMMITの場合もあります)

sato965
質問者

補足

myspl、postgreSQLは自動コミットだったと思うのですが、Oracleと同様でコミットしないといけないのでしょうか? もし、そうならなぜコミットせずデータが入るときがあるのでしょうか? 知識不足で大変申し訳ありません!! ご教授よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A