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,
主キーについてはこちらがわかりやすいです。
キー 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 | | +----------+-----------------------+------+-----+---------+----------------+
今回はここまで。