3

何年も頭が痛いことに気がついた。まあ、比喩的に言えば。実際、私は自分のデータベース構造を見ていましたが、どういうわけか、トランザクションをまったく使用していないことに気付きました。どー。

begin transactionトランザクション ( 、rollback、など)に関するインターネット上には多くのデータがありますcommitが、驚くべきことに、トランザクションが重要な理由や、正確にどの程度重要なのかについての詳細はあまりありません。

何か問題が発生した場合の処理​​の概念を理解しています。これは、複数のテーブルを一度に更新するなど、複数の更新を行う場合には理にかなっていますが、私が知る限り、これは悪い習慣であり、私はこれを行いません。私のクエリはすべて、1 つのテーブルを更新するだけです。クエリがエラーになると、トランザクションがキャンセルされるか、トランザクションが発生しません。サーバーからプラグを抜く以外に、他に何が問題を起こしたり、1 つのテーブルの更新を破損したりする可能性がありますか?

つまり、私の質問は、

すべてのテーブルにトランザクションを実装することは、正確にどれほど重要ですか-トランザクションを持っていないことを完全に冒涜していますか、それとも本当にそれほど重要ですか?

アップデート

+1 invisal は、クエリがトランザクションとして自動的にラップされることを指摘しましたが、私は知りませんでした。私の質問の主題に関する複数の良い参考文献を指摘しました。

4

5 に答える 5

4

これは、複数のテーブルを一度に更新する場合など、複数の更新を行う場合に非常に役立ちます。しかし、基本的にすべてのクエリは、一度に 1 つのテーブルを更新するだけです。クエリがエラーになると、トランザクションがキャンセルされるか、トランザクションが発生しません。

あなたの場合、それは何もしません。単一のステートメントには、独自のトランザクション自体があります。詳細については、既存の質問と回答を参照してください。

于 2013-10-06T05:06:48.283 に答える
1

データベースの最も重要な特性は、データを確実に保持することです。

データベースの信頼性は、 ACIDの原則 (原子性、一貫性、分離、耐久性) に準拠することで保証されます。データベースのコンテキストでは、データに対する単一の論理操作はトランザクションと呼ばれます。取引がなければ、そのような信頼性はありえません。

信頼性に加えて、トランザクションを適切に使用すると、一部のデータ操作のパフォーマンスが大幅に向上します。たとえば、トランザクションを開始し、大量のデータ (たとえば 100k 行) を挿入してからコミットすることができます。commit が呼び出されるまで、サーバーは実際にディスクに書き込む必要はなく、メモリ内のデータを効果的にバッチ処理します。これにより、パフォーマンスが大幅に向上します。

于 2013-10-06T05:06:51.927 に答える
1

テーブルが 1 つだけの場合でも、データベースに対するすべての更新アクションはトランザクション内で実行されることに注意してください (SQL サーバーはそのテーブルのトランザクションを自動的に作成します)。 常にトランザクションを行う理由は、他の人が言及したように ACID を確保するためです。ここで、分離点について詳しく説明したいと思います。トランザクションを分離しないと、コミットされていない読み取り、反復不可能な読み取り、ファントム読み取りなどの問題が発生する可能性があります。

于 2013-10-06T05:13:46.060 に答える
0

1つのテーブルと1つの行を更新するかどうかによって異なりますが、唯一の利点はログにあることです...しかし、一度にテーブル内の複数の行を更新すると...トランザクションがなければ、まだいくつかの中断が発生する可能性があります

于 2013-10-06T04:58:22.280 に答える
0

ほとんどの場合、、 、、、およびその他SQLのホスト言語のデータをサポートするために使用されます。まあ、私は多くの技術を扱っていません..しかし、次の組み合わせを使用している場合、ここに私の見解があります:cc++javaphpc#

C / C++を使用したSQL :コミットが必要

Javaを使用したSQL :不要

C#を使用したSQL :不要

PHPを使用したSQL :不要

また、使用している SQL にも依存します。Oracle SQLまた、SQL ServerSQLite、などのさまざまな種類の SQL にも依存しますMySQL...

などのOracle SQLコンソールで使用している場合は、 COMMITが必要です。Oracle 11gOracle 10g

そして、テーブルとデータの破損に関する限り。はい、たまたま、私はそれで非常に悪い経験をしました。そのため、テーブルの更新中にワイヤーなどを引き抜くと、大規模な災害が発生する可能性があります。

結論として、コミットすることをお勧めします。

于 2013-10-06T05:07:59.880 に答える