こんにちは。
タイトルの通りなのですが
PHPではpostgreを使用してのトランザクション処理で
処理が失敗した時に
ロールバック処理を意識しなくていいのでしょうか?
$conn=pg_connect("host=dbhost user=dbuser password=password dbname=dbname port=5432");
$query="BEGIN;";
$result=pg_exec($conn,$query);
$query="INSRET INTO ....;";
$result=pg_exec($conn,$query);
$query="COMMIT;";
$result=pg_exec($conn,$query);
pg_close($conn);
このコミット時に自動でロールバックされる?
どなたかご存知の方、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
PHPよりも、postgreの板で聞いたほうがよいかもしれません
PHPはROLLBACKに関してはまったく関係ないです
トランザクションとは、小さな処理をひとまとめに考えて、どれか1つの処理でも正常に処理されなかった場合に全ての処理を無かったことにする
という概念です
例えば、現金自動引き落とし機の場合
「現金を支払う」
という処理のほかに
「残高を支払った分だけ引く」
という処理が同時に成功しなくてはなりません
BEGIN でトランザクションを始めて、
COMMITで終わるわけですから、
BEGINの後に、処理をし、その後にデータチェックさせて正常ならばCOMMITさせて、異常ならばROLLBACKさせる
という処理でなくては意味ないです
トランザクション開始(BEGIN)
データの保存(UPDATEなど)
データを読み込んで(SELECT)
データのチェックをして
異常ならばROLLBACK
正常ならばCOMMIT
という流れになります
INSERTの失敗は、データには何も書き込まれませんからROLLBACKする必要の無い質問例文になっていますね
No.2
- 回答日時:
普通は何らかの処理が失敗した場合にはロールバックしますが、
インサートが失敗したときは、変更が無かったということなので、
ロールバックする必要もないということでしょうね。
>コミット時に自動でロールバックされる?
とても勘違いがあると思います。
コミットは、ロールバックしたときの戻れる時点を作ると考えるといいと思います。
トランザクションは
関連する処理をひとまとめに考えて
例えばあるトランザクションとしてA,B,Cという3つの処理が必要な時に
Aという処理は終わったが、何らかの理由でBができなかったり、Cができなかったときに、Aという処理自体も無効(なかったことにする)にするために、ロールバックをします。
Cまでの処理が終わった時点で、次のロールバックがかかったときに、今成功した処理が無効になってしまわないために、成功した一区切りの処理が終わったらコミットします。
もし次ロールバックが起こったらこのコミットした時点に戻ることになります。
No.1
- 回答日時:
例題に多少の疑問はあるが、
各クエリの成否によりcommitするか決めるのが普通
> このコミット時に自動でロールバックされる?
意味がわかりにくいが、失敗時にロールバッグされるかという意味?
まずは、最後のcommitを省くとどうなるか試してみる
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
Cronで同じ処理を複数同時に実...
-
PHPで文字列(日本語)の比較
-
phpの処理中に画面表示ををする...
-
PHP内、ボタン押下と同時にリロ...
-
VBAからPHPを実行(キック)したい
-
外部ドメインからのPOST送信を...
-
Smartyにて、文字検索
-
【PHP】URLがドメイン名...
-
インスタンス化に伴うメモリ消...
-
Subversionのリポジトリの削除
-
FTPコマンドでディレクトリごと...
-
$_FILES['x']['error']について
-
PHPでの複数ファイル出力
-
VB.NETのFTPダウンロードについて
-
HTMのファイルをPHPに変換す...
-
フォントの色を変えるには?
-
php.ini を設定を変更すると再...
-
ファイル書き込みでたまにデー...
-
GDで生成したはずの画像が文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
phpの処理中に画面表示ををする...
-
Smartyにて、文字検索
-
PHPが処理を途中でやめる。原因...
-
VBAからPHPを実行(キック)したい
-
PHP内、ボタン押下と同時にリロ...
-
インスタンス化に伴うメモリ消...
-
Cronで同じ処理を複数同時に実...
-
PHPで文字列(日本語)の比較
-
大量チェックボックスの実装方...
-
web画面から呼び出したphp処理...
-
3の倍数の和
-
プログラム内で処理中断後も継...
-
PHP postgres でロールバック...
-
PHPの複数関数非同期実行方法を...
-
外部ドメインからのPOST送信を...
-
csvファイルの読込みとソート
-
PHPで偶数と奇数を判断するには
-
携帯キャリア判断
-
リンクのラベルを取得したい
おすすめ情報