間違えた/間違えそうだった問題のポイントのまとめです。
WHERE句はグループ化されたデータに対して適用できない。グループ化された結果に条件を指定する場合は、HAVING句を用いる。SELECT文の一般的な構文は、下記のようになる。
SELECT 列名リスト FROM 表名 WHERE 抽出条件
GROUP BY グループ化列名リスト HAVING グループの抽出条件
表やデータベースの中で、同じデータ型(デフォルト値、条件指定を含む)が頻繁に利用される場合、それらを新しいデータ型として定義することができる。それをドメインという。ドメインを定義するにはCREATE DOMAIN文を用い、ドメインを削除するにはDROP DOMAIN文を用いる。
CREATE DOMAIN {ドメイン名} [AS] {データ型} [DEFAULT句] [CHECK制約]
READ COMMITTED:
他のトランザクションの行った変更に関しては、常にコミットされたものだけを受け取る。そのため、他のトランザクションによる自身の更新結果の損失(ロストアップデート)、他のトランザクションの処理中の結果の読み込み(ダーティリード)は生じない。しかし、あるトランザクションがデータを複数回読み込む場合、その間に他のトランザクションの変更がコミットされて、読み込むたびに同一データの内容が異なる(アンリピータブルリード)、前回の読み込み時には存在しなかったデータを読み込む(ファントムリード)などの現象が生じる。
READ UNCOMMITTED:
他のトランザクションの行った変更前のデータを読み込む。したがって、ロストアップデートは生じないが、ダーティリード、アンリピータブルリード、ファントムリードが生じる。
REPEATABLE READ:
あるトランザクションが実行されている間は、データが途中で他のトランザクションによって変更されることなく、同じデータを何度読み込んでもその内容は同じである。そのため、ロストアップデート、ダーティリード、アンリピータブルリードは生じないが、ファントムリードが生じる。
SERIALIZABLE:
同時に実行されるすべてのトランザクションが、各トランザクションが順番に実行されたときと同じ結果になるように保障する。そのため、ロストアップデート、ダーティリード、アンリピータブルリード、ファントムリードは発生しない。
隔離生水準 | ロスト アップデート |
ダーティ リード |
アンリピータブル リード |
ファントム リード |
READ UNCOMMITTED | × | ○ | ○ | ○ |
READ COMMITTED | × | × | ○ | ○ |
REPEATABLE READ | × | × | × | ○ |
SERIALIZABLE | × | × | × | × |
0 件のコメント:
コメントを投稿