2009-04-03 3 views
2

私はウェブアプリケーションを実行しており、新しい計算でテーブルの1つを更新するために別のアプリケーションでSQL DBにアクセスしたいと思います。更新中にユーザーに何か気付くでしょうか?私が更新を行うと同時にアクセスする場合、または自動ロックがある場合、私はエラーが発生しますか? tia更新ジョブ中にSQLテーブルを「ロック」する必要はありますか?

答えて

3

一般に、更新を実行する間に行がロックされ、更新が完了するまでこれらの行を使用する可能性のあるSQLクエリが「ハング」し、正しいデータが返されます。

これにはいくつかの例外がありますが、長期間にわたってデータがロックされるような長期的な更新を行わない限り、一般的には心配しません。

3

もしあなたのRDBMSが良いものなら、それはあなたのためにそれを処理する必要があります。

"autocommit"がオフになっていることを確認し、更新が完了したらコミットする必要があるかもしれません。

0

自動ロックはありません。あなたがしたいことが迅速であれば、複数のアクセスの可能性が本当にであるので、自動ロックする必要はありません。

しかし、長い更新を予定している場合は、更新を行っている最中にメンテナンスページをフロントページに配置することを真剣に考えてください。

+2

-1、私はもっと持っていたがっています。これはひどいアドバイスです。あなたの見積もりでは、何かの確率が低いので、故意にコードにバグを記述することはできません。このようなエッジ、レース、その他のあいまいなコーディングエラーは、時間がかかります。 **最初に正しく実行してください**。 – Cruachan

1

どれほど幸運であるかに応じて、更新前または更新後に値が表示されます。通常、これは問題ではないので、ロックの問題をすべて無視することができます。彼らはテーブル自体をロックしようとしない限り、エラーは発生しません。

1

これは、使用しているDBMSと使用している分離レベルによって異なります。 See here for what PostgreSQL documentation has to say.基本的には、さまざまな方法でアップデートを処理できます。一方では、更新が部分的にコミットされた更新から矛盾したデータを取得する可能性があるのと同時に発生する読み取りもあります。もう一方の側では、トランザクションは完全に同期しています。ほとんどのDBMSは、効率の理由から、間に何かをする傾向があります。

1

トランザクションの能力を持つRDBMSを使用する場合は、ロックする必要はありません。これはあなたのために行われます。そうでない場合は、使用する行とテーブルをロックする必要があります。

ほとんどのRDBMSシステムにはトランザクションのサポートがありますが、これは心配するものではありません。

関連する問題