ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

MySQL入門 - フィールドのオプション設定について

前回は、テーブルを作る方法、作ったテーブルの構造を取得する方法などを確認した。

azuuun-memorandum.hatenablog.com

今回は前回のテーブル作成時のフィールド設定、

create table users (
    id int,
    name varchar(255),
    age int,
    email varchar(255),
    password char(32),
    sex enum('male', 'female'),
    memo text
);

こちらをより便利にする設定を付加していく。

フィールドにオプションを付加する

まず, idカラム に付加すると便利なオプションとして、

  • 入力を必須とする not null
  • 自動連番 auto_increment

sexカラムに付加すると便利なオプションとして、

  • デフォルト値 default

emailカラムに付加すると便利なオプションとして、

  • ユニークキー unique

がある。

入力を必須とする not null

not null は null を許可しないというもので、指定することによってそのレコードを挿入する際にidフィールドが null であることを防ぐことができる。

id int not null

自動で連番を付けてくれる auto_increment

auto_increment は整数型のみ指定できるオプションで、自動的に連番の値を格納してくれる。初期値1で対象のレコードが null または 0 であった場合、前のレコードの値+1を格納する。

id int not null auto_increment
  • auto_increment の注意事項
  • AUTO_INCREMENTを設定するカラムには同時にインデックスを設定する必要がある
  • AUTO_INCREMENTはテーブル内の1つのカラムにしか設定できない
  • AUTO_INCREMENTを設定したカラムにはDEFAULTは設定できない
  • AUTO_INCREMENTには正の値しか格納できない(負の数も可能だが予期しない結果となる)
    AUTO_INCREMENTの設定 - テーブルの作成 - MySQLの使い方

デフォルト値を設定する defalut

defaultはテーブルにデータを追加する時、カラムに値が指定されなかった場合にデフォルトで設定される値を入れてくれる。 定数のみ設定することができるが、例外としてTIMESTAMP型というものがある。

sex enum('male', 'female') default 'male'

重複を許さないユニークキー unique

ユニークキーが設定されたカラムでは重複する値は入れることが出来ない。

email varchar(255) unique,

主キー(プライマリーキー) primary key

そもそも主キーって何だろう…

組(レコード)の識別子として利用するのにもっとも好ましいものとして、リレーション(テーブル)毎にただ一つ設計者により選択・定義された候補キーをいう。
主キー - Wikipedia

idに付加するのが適切かな。idは一意なものであるので、識別子として好ましい。あと主キーは必ず入力する必要があるからnot nullをセット。(書かなくても勝手にnot nullになる)

id int not null auto_increment primary key,

主キーについてはこちらがわかりやすいです。

01 主キーの設定

 キー key

このキーというのは例えば score というカラムがあったとして、この値をよく検索する場合インデックスすることで検索が早くなる…らしい。自分もよくわかっていない。今後考えていく。

key score(score)

インデックスについて

インデックスは、主キー、キー、ユニークキー等のことを指し、フィールドに付けておくと動作が早くなるという利点がある。 ただし、検索するときには速いが、データを挿入するときにインデックスをたくさん貼りすぎているとその度にインデックスを作り直すので動作が重くなるという面もある。バランスよくよく検索するフィールドに設定する必要がある。

最終的なフィールド設定

create table users (
    id int not null auto_increment primary key,
    name varchar(255),
    age int,
    email varchar(255) unique,
    password char(32),
    sex enum('male', 'female') default 'male',
    score double,
    memo text,
    key score(score),
    created datetime
);

scoreやdatetimeを追加した。scoreには適当な数値が入って、datetimeは日付が入る。

最後に users テーブルの構造を確かめておく。

+----------+-----------------------+------+-----+---------+----------------+
| Field    | Type                  | Null | Key | Default | Extra          |
+----------+-----------------------+------+-----+---------+----------------+
| id       | int(11)               | NO   | PRI | NULL    | auto_increment |
| name     | varchar(255)          | YES  |     | NULL    |                |
| age      | int(11)               | YES  |     | NULL    |                |
| email    | varchar(255)          | YES  | UNI | NULL    |                |
| password | char(32)              | YES  |     | NULL    |                |
| sex      | enum('male','female') | YES  |     | male    |                |
| score    | double                | YES  | MUL | NULL    |                |
| memo     | text                  | YES  |     | NULL    |                |
| created  | datetime              | YES  |     | NULL    |                |
+----------+-----------------------+------+-----+---------+----------------+

今回はここまで。