データベース設計

トランザクション

複数の処理を一つの処理とみなし、全て成功か、全て失敗のどちらかになる。

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 (列名)

副問合せ

<手順>

  1. 副問合せ
  2. ①の結果を使用して主問合せをする
SELECT * FROM 従業員表
 WHERE 年齢 <> ( SELECT MAX(年齢) FROM 従業員表 )

… 副問合せ