
データベース設計
Contents
トランザクション
複数の処理を一つの処理とみなし、全て成功か、全て失敗のどちらかになる。
ACID特性
原子性 ATOMICITY | 完全に実行されるか、全く実行されないかどちらか |
一貫性 CONSISTENCY | トランザクションの実行前後で整合性をもち、一貫したデータである |
独立性 ISOLATION | 他のトランザクションへ影響しない |
耐久性 DURABILITY | データが失われることは無い |
ロック
共有ロック
- データを参照する時
- 共有ロック中は他のトランザクションからもデータを参照できる
- 共有ロック中は更新はできません。
占有ロック
- データを更新する時
- 占有ロック中は他のトランザクションからもデータを参照できない
- 占有ロック中は更新はできません。
デッドロック
2つのトランザクションが、お互いが共有資源解放待ち状態となり、どちらも処理も進行できなくなる状態
コミット
トランザクション処理を確定させる。
アボート
中止、強制終了
ロールバック
トランザクション処理失敗 → トランザクション前に戻す
ロールフォワード
データベースの内容を障害前の変更時の状態に戻す
選択
必要な行だけを抜き出す
射影
データの中から、必要な列だけを抜き出す
結合
同じ列を基準に2つの表をくっつける
正規化
- 整合性の向上
第1正規化
- 繰り返し要素をなくす
- 行の結合を解除
第2正規化
主キーの一部の関数従属性を排除。
※関数従属性…ある列に別の列が連動する、例)従業員番号→氏名
- 主キー … 行を特定できる列
- 複合キー … 行をを特定できる複数の列
第3正規化
主キー以外の列の関数従属性を排除
外部キー
- 参照整合性制約
- 参照先の表の列の値しかとれない

非NULL制約
NULLが入れられない

SQL
AS
SELECTで抽出したものに別名をつける。
SELECT
customer AS '顧客'
, cost AS '費用'
, category AS 'カテゴリ'
FROM
item;
CHECK
条件に合わなければ、書き込みを拒否される
CHECK( 条件式 )
GROUP BY
- 特定の列の数値によって、切り分ける。(最大値、最小値など)


IN
複数の値のうちいずれかと一致している行を抽出する。
SELECT * FROM テーブル名 WHERE カラム名? IN ('値1', '値2');

LIKE
- 文字列検索
ワイルドカード
- % … 0文字以上の任意の文字列
- _ … 任意の1文字
ORDER BY
SELECT
SELECT 列名,列名,…
FROM テーブル名

*(アスタリスク) … 全ての列
DISTINCT
SELECTで抽出した、レコードで重複しているものを除外する
WHERE
条件を指定して選択します。
SELECT 列名 FROM
テーブル名 WHERE 条件A AND 条件B;
{SQLの命令文} WHERE [列1] = [値];
解答法

HAVING
集合関数を使って行を絞る


CASE
CASE
WHEN {条件式} THEN {真の場合の値}
WHEN {条件式} THEN {真の場合の値}
…
ELSE {偽の場合の値}
END
集合関数


AVG
平均値を求める
COUNT
個数を求める
MIN
最小値を求める
MAX
最大値を求める
SUM
合計値を求める
・select SUM(列名) from (テーブル名)
・条件付き
select SUM(列名) from (テーブル名) where (条件式)
・グループ
select SUM(列名) from (テーブル名) group by (列名)
副問合せ
<手順>
- 副問合せ
- ①の結果を使用して主問合せをする
SELECT * FROM 従業員表
WHERE 年齢 <> ( SELECT MAX(年齢) FROM 従業員表 )
… 副問合せ