0
0

More than 1 year has passed since last update.

「スッキリわかるSQL入門」を読んだので。

Posted at

スッキリわかるSQL入門 を読んだので、個人的に気になったことなどをまとめてます。

学んだこと

集合演算子

和集合

縦にくっつける

SELECT column FROM table1
UNION
SELECT column FROM table2

差集合

SELECT column FROM table1
EXCEPT
SELECT column FROM table2

積集合

SELECT column FROM table1
INTERSECT 
SELECT column FROM table2

NULLでない値を返す

引数のうち、最初に現れたNULLでない引数を返す。

COALESCE('A', 'B', 'C') /* 結果:A */
COALESCE(NULL, 'B', 'C') /* 結果:B */
COALESCE(NULL, 'B', NULL) /* 結果:B */

NULLでない場合は値を、NULLの場合は他の値を返す時に使う。

SELECT COALESCE(column, 'columnはNULLです')
FROM table

トランザクション管理

BEGIN;
処理1
処理2
COMMIT;

トランザクション処理における副作用

ダーティーリード
まだコミットされていない未確定の変更を、他の人が読めてしまう。
ノンリピータブルリード
SELECT文を実行した後、他の人がUPDATE文でデータを書き換えると、次にSELECTした際に結果が異なってしまう
ファントムリード
2回のSELECT文の間に、他の人がINSERT文で行を追加すると、最初と次のSELECTで取得する結果の行数が変わってしまう

トランザクション分離レベル

分離レベル ダーティーリード ノンリピータブルリード ファントムリード
READ UNCOMMITTED 恐れあり 恐れあり 恐れあり
READ COMMITTED 発生しない 恐れあり 恐れあり
REPEATABLE READ 発生しない 発生しない 恐れあり
SERIALIZABLE 発生しない 発生しない 発生しない
多くのDBMSでは、デフォルトでREAD COMMITTEDで動作している。

トランザクション分離レベルの指定

SET TRANSACTION ISOLATION LEVEL 分離レベル
SET CURRENT ISOLATION 分離レベル

明示的な行ロック

SELECT column FROM table FOR UPDATE;

明示的な表ロック

LOCK TABLE table IN モード名 MODE

権限付与・権限はく奪

/* 権限付与 */
GRANT 権限名 TO ユーザ名

/* 権限はく奪 */
REVOKE 権限名 FROM ユーザ名

Create時の制約

NOT NULL
NULLを許可しない。DEFALUTと組み合わせて利用されることがほとんど。
UNIQUE
内容が重複してはいけない。
CHECK
CHECKのあとの条件式が真になる値だけ格納する。
PRIMARY KEY
NULLも重複も許可しない
REFERENCES
外部キー制約。REFERENCES 参照先テーブル名 (参照先列名)で定義する。

外部キー制約は最後にまとめて定義できる。

CREATE TABLE table (
    
    FOREIGN KEY(参照元列名)
        REFERENCES 参照先テーブル名 (参照先列名)
)

インデックス

  • インデックスは指定した列に対して作られる。
  • 複数列をひとつのインデックスとする複合インデックスも作成可能
  • メリット
    • インデックスが存在する列に対して検索が行われると、高速になる場合が多い
  • デメリット
    • インデックを作成するとディスク容量を消費する
    • データが更新されるとインデックスも書き変える必要があるため、INSERT, UPDATE, DELETEのオーバヘッドが増える。
/* インデックス作成 */
CREATE INDEX インデックス名 ON テーブル名(列名)

/* インデックス削除 */
DROP INDEX インデックス名

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0