質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

2045閲覧

トランザクション分離レベルとプログラムの関係

退会済みユーザー

退会済みユーザー

総合スコア0

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2016/10/15 14:07

編集2016/10/16 02:28

DBMSのトランザクション分離レベル(DBMSによって異なる)とプログラムは影響を受けるのでしょうか?
「達人に学ぶDB設計徹底指南書」(2012年、ミック著)のという本を読んでいます。
次のような文章が238ページにありました。オートナンバリングの実現方法としてアプリケーション側で実装した場合についての記述です。
なお、オートナンバリングで作られる代理キーは市町村についてのデータを管理する「市町村」テーブルにあります。さらに、アプリケーション側の実装では、採番テーブルという一行一列の整数を保持したテーブルを用い、他のテーブルに要素が挿入されるたび、値をインクリメントしていきます。

「おそらく最大の問題は、排他制御の仕組みをきちんと作らないと機能的なバグを生み出してしまうことです。考えてみればわかることですが、二人以上の人間が同時に採番テーブルにアクセスして、同じ番号を引き当ててしまったら、「市町村」テーブルへのINSERT時に一意制約違反がおきます。また、逆に番号が飛び石になってしまうこともあります。これを防止するには、一人が採番テーブルにアクセスした時点でテーブルをロックし、他の人間は参照も更新もできないようにすることです。こうした排他制御を意識したプログラム作成は、複雑になりがちですし、DBMS間でトランザクション分離レベルが異なることも多いため、異なるDBMSにプログラムを移植するにも、簡単にはいきません。」

トランザクション分離レベルが異なるからプログラムの移行がうまく行かない、という理屈がわかりません。
例えば、あるDBMSは5つのSQL文をためて、一気に実行するが、別のDBMSは10個ためてから、実行する、といった違いがトランザクション分離レベルの意味になると思うのですが、このレベルの違いがどうしてプログラムの移行に関わるのでしょうか?
お分かりの方、回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2016/10/16 00:57

引用は正確に行ってください。ワープロ誤字がありますよ。他人の文章は丁重に扱いましょう。ついでに、引用元の書誌もきちんと書きましょう。普通は「著者名『書名』出版社、出版年、〇〇ページ」のように書きます。
guest

回答1

0

ベストアンサー

例えば、あるDBMSは5つのSQL文をためて、一気に実行するが、別のDBMSは10個ためてから、実行する、といった違いがトランザクション分離レベルの意味になると思うのですが

そもそも、この認識自体が全く違います。「トランザクション分離レベル」は、複数のトランザクションを同時に走らせようとした場合に、それぞれどうしがどのような関係で実行されるかを規定するものです。SQL標準では4つが規定されています。

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

まずは、正しい「トランザクション分離レベル」の内容を確認することをおすすめします。

投稿2016/10/15 15:23

編集2016/10/15 15:24
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/16 02:27

回答ありがとうございました。 トランザクション分離レベルについては理解できましたが、これが異なるとプログラムの移行がうまくいかいないのはなぜでしょうか? トランザクション分離レベルのお話はDBMS内部の事情のように思えるのですが。
maisumakun

2016/10/17 00:24

トランザクション分離レベルはエンジン内部で収まる話ではなく、SQL文の実行結果も変化します(だからこそSQLから設定可能になっています)。「ダーティーリード」「ファジーリード」「ファントムリード」「ロストアップデート」などといった現象が生じます。 とりわけ、SQL規格では「起きるかもしれない」となっているREPEATABLE READでのファントムリードが、MySQLでは発生しないなど、実装特有の挙動も多いので、移植した場合にそれに依存しているとひどいことになります。
退会済みユーザー

退会済みユーザー

2016/10/17 01:44

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問