テーブル・カラムの設定内容【phpMyAdmin】

テーブル・カラムの設定内容【phpMyAdmin】

2021/02/08

実行環境

今回はphpMyAdminで説明を行います。

カラムの設定

ローカルのphpMyAdminでは、「コメント」より右側にも項目(仮想・カラムを移動させるなど)がありますが、レンタルサーバーのphpMyAdminにはそれらの項目は存在しないことが多いので、説明を省略します。

名前

カラム名を設定します。

カラム名は日本語でも入力できますが、普通は英語で入力します。

命名規則

基本的に英単語(とその省略形)の組み合わせでカラム名を入力します。

名前→name、ユーザー名→user_name/u_name、団体名→group_name/g_name

参考:プログラミングでよく使う英単語のまとめ -Qiita

データ型

データの値の種類を設定します。以下ではよく使うデータ型を列挙しています。

数値

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(主キー)として使用されることが多いです。

コメント

コメントをつけることができます。動作には影響しません。