7月11日(火)1、2コマ目

今日、やったこと

  • [確認テスト]Razorページ+ODP.NET
  • トランザクション

今日のホワイトボード

[確認テスト]Razorページ+ODP.NET

正解例をあげておきます。

Group.cs

グループ情報受け渡し用クラス。

Item.cs

商品情報受け渡し用クラス。

GroupDAO.cs

CS_グループマスタテーブルアクセス用クラス。

ItemDAO.cs

CS_商品マスタテーブルアクセス用クラス。
ポイント

あいまい検索で引っかかっている人がかなりいました。

  • 演算子はlike
  • パラメータマーカーに"%"+検索キーワード+"%"を差し込む
図 あいまい検索


Index.cshtml.cs


Index.cshtml


トランザクションとは

1件の処理=1トランザクション

送金処理や在庫数更新のような1つの処理で1つのトランザクション。

1つのトランザクションには複数のSQLを実行するケースが多い。


トランザクションに必要な要件

基本情報とかに出てくるACID特性が必要。

  • Atomicity(原子性)
  • Consistency(一貫性)
  • Isolation(独立性)
  • Durability(永続性)


トランザクションの原子性

トランザクションが終了したときに、

  • 全てのSQL(更新)を実行
  • まったくSQL(更新)を実行していない

のいずれかでなければならない。更新したデータもあれば、更新できなかったデータもあるはNG。

図 トランザクションの原子性

commit、rollback

トランザクションの原子性はcommit、rollbackで実現。
図 commit、rollback

トランザクションの独立性

トランザクションは単独で実行しても、複数同時に実行しても結果は同じでなければならない。
図 トランザクションは単独でも複数同時実行でも同じ結果にならなければならない

トランザクションの独立性のために、トランザクションを分離させて実行し、お互いに影響がないようにする。
トランザクションの分離の程度は全く分離しないRead Uncommitedからほぼ完ぺきに分離するSerializableまで4段階の分離レベルある。
分離レベルに応じて他トランザクションにいろいろな影響(ダーティーリード、ファジーリード、ファントムリード)を与える。

ダーティーリード

他トランザクション実行中の更新済みデータ(未確定なデータ。場合によってはロールバックされてもとに戻る)が参照してしまうこと。
図 ダーティーリード
多くのDBはデフォルトのトランザクション分離レベルがRead Commited。この分離レベルならダーティーリードは発生しない。
トランザクション分離レベルがRead Uncommitedならダーティーリードが発生する。

Read Commited…非コミットなデータは読み込まない
Read Uncommited…非コミットなデータも読み込む

ファジーリード

同じデータを参照しても、他トランザクションが更新することで、毎回異なるデータを参照する。
分離レベルがRead Commitedなら、コミットされたデータは読み込むため、ファジーリードが発生する。

ファントムリード

他トランザクションが追加、削除することで、参照するたびに出力行数がことなる。
分離レベルがRead Commitedなら、コミットされたデータは読み込むため、ファントムリードが発生する。

次回は

トランザクションの続きをやります。
C#+ODP.NETでのトランザクションの実装をやります。





 

このブログの人気の投稿

6月27日(火)1、2コマ目

6月20日(火)1、2コマ目

7月4日(火)1、2コマ目