質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

5回答

9602閲覧

トランザクション、コミット、ロールバックとはなんでしょうか。

MensJink

総合スコア83

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2017/01/17 12:14

###前提・実現したいこと
PHPを勉強中です。

###発生している問題・エラーメッセージ
PDOを書籍を参考にデータベース接続で利用したのですが、トランザクション、コミット、ロールバックという単語が出てきました。トランザクションはそれ以上分けることのできない処理、トランザクションが成功したときにする処理がコミット、逆に失敗したときはロールバックをする、というようにGoogle検索などを利用しながら整理しましたが、PHPを実際に書くときになるとその3つをどのように書けばいいのか、利用するのかに躓いてしまうので、より理解を深めるために知識のある方にもう一度この3つの単語とその関係について教えてもらおうと思い質問しました。

###該当のソースコード
なし。

###試したこと
Google検索で言葉の意味を検索する。

###補足情報(言語/FW/ツール等のバージョンなど)
PHP7.0

よろしくおねがいします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

他の方の回答を見ましたが、

PHPを実際に書くときになるとその3つをどのように書けばいいのか

に回答している方がいらっしゃらないようなので、参戦。

トランザクションおよび自動コミットによると、PDOはデフォルトで自動コミットモードで動作します。自動コミットとはどういうものかというと、SQLを実行する前に自動的にトランザクション開始し、実行後、自動的にトランザクションをコミットします。

自動コミットでは、常に自動的にコミットしてしまうので、複数のSQLを1個のトランザクションで処理することはできません。これでは、複数の処理をアトミックに処理(成功するか否かで中途半端に成功することがない)することができません。
たとえば、銀行振り込みを例にして、「AさんがBさんの口座に100円振り込んだ」という処理をSQLにすると、「Aさんの口座の残額から100円引く」というSQLと「Bさんの口座の残額に100円足す」という2つのSQLを実行することになります。この2つのSQLは何があっても(途中でシステム障害が発生しても)、片方だけ成功するということがあってはならないので、1個のトランザクションにまとめる必要があります。

この場合、PDOでは、PDO::beginTransaction() を最初のSQLの前に実行することで、自動コミットを避ける必要があります。たとえば、

  1. PDO::beginTransaction()
  2. Aさんの口座の残額から100円引く
  3. Bさんの口座の残額に100円足す
  4. PDO::commit()

というプログラムを書くと、自動コミットは行われず、1個のトランザクションで実行されます。途中でエラーが発生した場合は PDO::rollBack() を呼んでトランザクション全体をキャンセルします。

投稿2017/01/17 14:54

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

トランザクションが出来ていない場合の不具合例を解説した記事を以前書きましたので紹介します。

嵐のコンサートがあるとダブルブッキングしてしまうホテル予約システムを作ってみた

投稿2017/01/17 14:09

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以前に同様の質問がありました。
参考になるかもしれません。

SQLのコミットの意味

投稿2017/01/17 15:17

carimatics

総合スコア740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

トランザクション

トランザクションと呼ばれる不可分な操作から構成される情報処理の形態。
既知の一貫した状態のデータベースを維持するよう設計されており、相互依存のある複数の操作が全て完了するか、全てキャンセルされることを保証する。

コミット

データベースにおいてトランザクションによる内容更新を恒久的なものとして確定することを指す。
一般にトランザクションの終了時にその更新を確定するという意味で「コミットする」などと使用する

ロールバック

トランザクション処理システムはデータベースの整合性を保証するため、データベース更新の中間状態を記録し、トランザクションがコミットできなかった場合にデータベースを既知の状態にリストアするためにそのような記録を活用する。例えば、トランザクションによる更新前のデータベースの情報のコピーを事前に取って置く(これをbefore imageと呼ぶ)。トランザクションがコミット前に失敗した場合、そのコピーを使ってデータベースをトランザクション開始前の状態に戻す。これを「ロールバック」と呼ぶ。

by Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E5%87%A6%E7%90%86
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88

どの変が難しいですか?

トランザクションは処理の名前です。
始まりを宣言して、なんやかんや更新処理を覚えてくれています。(メモリに保存程度、他人には見えません)
確定(コミット)すると更新内容がDBに書き込まれます。(他人に見えます)
取り消し(ロールバック)は、確定する前に反映せずに終了!っと言う感じですね。

超勝手な説明ですが、そんな感じ... かなw(有識者の皆様ツッコミよろしくお願いします)

投稿2017/01/17 14:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考書を紹介しておきます。

投稿2017/01/17 13:14

ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問