忘れていたこと、知らなかったことを自分の忘備録としてメモしておきます。
2章: データベースの作成と設定
P21: 文字セット
- コマンド
SHOW CHARACTER SET
で、接続しているMySQLで使える文字コードの一覧が確認できる。
P25: 時間データ
- カラムにyear型を指定することで、日付の年だけを管理できる。
P31: Check制約
- create tableでは、列に検査制約を付与できる
eye_color CHAR(2) CHECK (eye_color IN ('BR', 'BL', 'GR'))
- 列の定義としてenumという文字データ型を定義することもできる
eye_color ENUM('BR', 'BL', 'GR')
13章
- MySQLでインデックスは、テーブルの付属物として扱われている。Oracleなどではインデクスは独立したスキーマオブジェクトで、create indexコマンドで生成する。
-
MySQL8.0ではcreate indexをサポートしている。これはalter tableとしてマッピングされている。また、MySQLでのPrimaryKey作成は依然としてalter tableを使う必要がある。
-
外部キー制約で参照されている列にインデックスを付ける。外部キー制約で親側を消すとき、RDBMSは子データがいないことを確認する。このときにインデックスが無いと全表スキャンになってしまう。
-
親子関係のテーブルで親がいない小テーブル側のレコードを、
孤立行
と呼ぶ。 -
外部キー制約で、
on delete restrict
をつけた場合、子がいる親の削除はエラーになる -
外部キー制約で、
on update cascade
をつけた場合、親側のキーの変更は子に伝播する -
外部キー制約にはrestrict cascadeに加えてset nullも存在する
-
on deleteとon updateは片方だけでも両方とも指定できる。
14章
14.2.3
- スカラーサブクエリを使うことでfromを1テーブルだけに限定できる。
17章
-
デフォルト(maxvalue)のパーティションに入ってしまったレコードは、altere table reorganize partitionで、再度パーティションを振り直すことができる。
-
パーティションの定義は informationschema.partitionsで調べることができる
-
特定のパーティションを明示的に検索するときは、下記のテーブル指定をfrom区に記載する
tablename PARTITION(partitionname)
-
パーティションにはサブパーティションという概念がある。例えば日付でパーティショニングして、ユーザIDのハッシュでサブパーティショニングできる。
こちらもおススメ