2016-05-28 20 views
-1

PHPでは、クエリを実行しているときにトランザクションを開始できます。しかし、にする必要がありますか?すべてのクエリでこの機能を使用するのは悪いですか?または、大量のデータを追加/削除/更新するときにのみこのクエリを使用する必要がありますか?トランザクションのすべてのクエリでPHPトランザクションを使用するのは悪い習慣ですか?

例:

try { 
    $db->beginTransaction(); 

    $db->exec("some query"); 

    $stmt = $db->prepare("another query"); 
    $stmt->execute(array($value)); 

    $stmt = $db->prepare("another query again??"); 
    $stmt->execute(array($value2, $value3)); 

    $db->commit(); 
} catch(PDOException $ex) { 
    //Something went wrong rollback! 
    $db->rollBack(); 
    echo $ex->getMessage(); 
} 

私の推測では、あなたのコード

TL内のすべてのクエリでこれを行う場合、それは重く、パフォーマンスをダウンさせるだろうということでしょう。DRあなたはトランザクションを使用することができますすべてのクエリで?または、データベースに対して大きな操作を実行するときにのみ使用しますか?

答えて

0

すべての変更を行う場合、または変更しない場合は、トランザクションを使用する必要があります。例えば、ある人から別の人にお金を移した場合、あなたは自分のバランスを高め、別の人を減らすべきです。

多くの簡単なクエリがあり、パフォーマンスが必要な場合は、トランザクションを使用することをお勧めします。それはデータベースに依存しますが、多くの場合、データベースはトランザクション中にすべての変更を行い、その後はディスクにフラッシュします。メモリはディスクよりもはるかに高速です。

ただし、負荷の高いサイトがある場合や、1000個のレコードを挿入する必要があり、100ミリ秒ごとに重要な場合のみ重要です。クエリーが100件未満の場合はシンプルで、半分を実行してスクリプトを中断したり(サーバーの再起動、PHPタイムアウトなど)、データは一貫していますが、トランザクションを使用することはできません。

明示的に開始しないとトランザクションを使用しないと思われる場合は、間違っている可能性があります。それはデータベースに依存しますが、各クエリでトランザクションを自動起動する可能性があります。
https://stackoverflow.com/a/2950764/437763

関連する問題