PHPを使用して自分のプロジェクトでSQL文を実行するためにbeginTransaction()を使用しようとしました。私はデータベースに書き込まれる必要があるアイテムの配列を持っているし、各アイテムは何かに対して格納される前に検証する必要があります。データベースの自動コミット動作を無効にすることについての良い点の1つは、途中で何か問題が生じた場合にトランザクション全体をロールバックできることです。私のプロジェクトでは、1つの項目が無効な場合、配列全体をデータベースに記録すべきではないため、このアプローチを使用することにしました。ロールバックはパフォーマンスを改善しますか?
これは実際にパフォーマンスの面で優れているのかどうか疑問に思っています。配列の最後の項目が検証されても、前の実行を手動でcommit()する必要があるからです。コミットはSQLの実行を繰り返しますか?
今私が考えることができる唯一の利点は、すべての項目を有効にして(すべての項目が有効であると仮定して)それらを検証し、それぞれを書きたい場合は2つではなく1つのループを実行するだけです。
SQLはデータベース製品ではありません。これは、多くのRDBMSで使用されている言語です。どのデータベースシステムを使用していますか、どのバージョンですか? – Ben
@Ben、postgresql – Michael
わずかにOT:データベースの状態と変更自体を調べることによって変更の有効性を判断できる場合は、おそらく検証をBEFOREトリガーに入れてビジネスロジックが使用されるアプリケーションコードのクライアントに関係なく適用されます。 – kgrittn