実行環境
今回はphpMyAdminで説明を行います。
カラムの設定
ローカルのphpMyAdminでは、「コメント」より右側にも項目(仮想・カラムを移動させるなど)がありますが、レンタルサーバーのphpMyAdminにはそれらの項目は存在しないことが多いので、説明を省略します。
名前
カラム名を設定します。
カラム名は日本語でも入力できますが、普通は英語で入力します。
基本的に英単語(とその省略形)の組み合わせでカラム名を入力します。
名前→name、ユーザー名→user_name/u_name、団体名→group_name/g_name
データ型
データの値の種類を設定します。以下ではよく使うデータ型を列挙しています。
数値
INT:整数型。-2147483648から2147483647に対応。整数ならとりあえずこれ。
TINYINT:整数型。-128から127に対応。
BOOLEAN:true/falseを取る型。TINYINTと同等で、0がFALSE、0以外がTRUEとみなされる。
文字列
VARCHAR:文字列型。可変長。文字数は「長さ/値」で入力した値が最大となる。
ENUM:あらかじめ列挙された値(文字列)のリストから選択する。
日付・時刻
DATATIME:日付+時刻。「2021-02-08 14:25:23」の形で表される。
TIMESTAMP:日付+時刻をUNIXタイムスタンプで表したもの。
「TIMESTAMP」は、1970-01-01 00:00:01からの経過秒数を表しています。数値であり計算しやすいことから、日時の差分計算などで使用されますが、2038年問題が起きる可能性があるので、使用はオススメしません。
MySQL 5.6 リファレンスマニュアル 第11章データ型
長さ/値
文字列型(VARCHAR)の場合には、最大文字数を入力します。
ただしENUMの場合には、値のリストをコンマで区切って入力します。
長さは2の累乗(4,16,256など)にするのが一般的です。また、長さは余裕を持って設定しておきましょう。
デフォルト値
データの挿入時に値が指定されなかった場合に入力される値です。
ユーザー定義:任意の値を指定することができます。
NULL:Nullをデフォルト値とします。
CURRENT_TIMESTAMP:挿入時の日時をデフォルト値とします。TIMESTAMP型である必要はなく、日付・時刻型であれば設定できます。(文字列型や数値型でも一応可能。)
「Null」とは、値が入っていないということを表すものです。空文字とは異なります。
照合順序
「文字コード+言語名+比較法」を表しています。
例えば、「utf8mb4_general_ci」の場合、
- 文字コード:utf8mb4 (utf8を4バイトに拡張したもの。絵文字などが使えるようになります。)
- 言語名:general (utf8にjapaneseはありません。)
- 比較法:ci (大文字と小文字を区別しない。AAで検索すると、aaもマッチする。)
utf8mb4_general_ci:MySQLの設定にもよるが、特に指定しない場合はコレになる。
utf8mb4_unicode_ci:大文字小文字、全角半角、ひらがなカタカナを区別しない。
ひらがなカタカナを区別しないで検索したい場合には、「utf8mb4_general_ci」を指定しておくといいでしょう。
属性
フィールド定義を指定します。
UNSIGNED:負数が使えなくなる代わりに、扱える正の値が増えます。例えば、TINYINT型は-128から127に対応しますが、UNSIGNEDにすると0から255に対応することになります。
UNSIGNED ZEROFILL:桁数をあわせるために、0埋めをします。例えば、長さ4の場合「1」は「0001」となります。またZEROFILLを使う場合は、自動的にUNSIGNED(正の値のみ扱える)になります。
on update CURRENT_TIMESTAMP:データを更新したときに、値をその更新日時に変更します。
NULL
Nullを使えるようにするかを設定します。
Nullはどのような型でも初期値であることが判断しやすいため、「値がなにも登録されていない」状態かどうかをチェックするのによく利用されます。
NullをSQLで検索する場合は、他とは異なり特殊な形で表します。
例えば、Nullである(ない)かどうかは以下の形で表現します。
項目名 is Null / 項目名 is not Null
インデックス
インデックス(索引)を設定します。
インデックスを使用すると、検索時に高速に処理することができるようになります。(参考書の巻末についている索引をイメージすればいいかと思います。)
また、インデックスには「ユニーク制約」というのを設定することができます。これは値を一意(同じ値を認めない)に制限するものです。
INDEX:インデックスを設定します。
UNIQUE:ユニーク制約を持ったインデックスを設定します。
PRIMARY:ユニーク制約+Nullではない(Not Null)制約を持ったインデックスを設定します。
PRIMARYは「主キー」と呼ばれ、そのデータを一意に特定することができることから、一般的には「id」に主キーを設定します。
主キーによってデータを一意に特定できることから、逆に主キーを設定しないと、データを一意に特定することができません。
したがって主キーを設定しないと、phpMyAdminでは各データの編集・削除をすることができません。
「主キー」は1つのカラムに対して設定するだけでなく、複数のカラムの組み合わせに対して「主キー」を設定することもできます。
例えば、「姓」と「名」の組み合わせでデータが一意に定まる場合は、「姓」「名」の組み合わせを主キーとして設定します。
A_I
AUTO_INCREMENTを設定します。これは、連続した数字を自動的に入力するものです。
AUTO_INCREMENTを設定すると、値が重複することがないため、ID(主キー)として使用されることが多いです。
コメント
コメントをつけることができます。動作には影響しません。