2php : MySQLのフィールドに指定する属性

 

フィールドに指定する属性について

DEFAULT属性について

DESCRIBE文によりテーブルの内容を閲覧した時に表示されるDefaultの部分は、これはデータを格納時に何も指定しなかった場合に自動的に格納される値になります。

テーブル作成時にNOT NULLかNULLかを指定していましたが、DEFAULT属性値を設定することもできます。

mysql> CREATE TABLE comicbeam_shain
    -> (
    -> number INT(6) DEFAULT 1000 NOT NULL,
    -> string ENUM('M','F') DEFAULT 'F' NOT NULL,
    -> date YEAR DEFAULT 2004 NOT NULL
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> DESCRIBE comicbeam_shain;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| number | int(6)        |      |     | 1000    |       |
| string | enum('M','F') |      |     | F       |       |
| date   | year(4)       |      |     | 2004    |       |
+--------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

これを見るとNULLにYESが一つもないことが分かります。なぜなら、すべてのフィールドにNOT NULLを指定したからです。

DEFAULT属性は数字型、文字型のENUM/SET、そして日付/時間型のフィールドに指定できます。基本的に標準値だけの場合は、""(ダブルコーテーション)や''(シングルコーテーション)などで囲む必要はありません。

DEFAULT文で作成したテーブルを確認してみると、Defaultというフィールドの部分がDefault値として指定した値になっていることが確認できます。

PRIMARY KEY属性

テーブル中のフィールド一つだけに指定できる属性です。PRIMARY KEYが指定されたフィールドには、同じ値を重複して格納することができません。例えば、tamakichi,hiropon,Omuraとデータを格納し、かつPRIMARY KEYが指定されているフィールドには、この後にtamakichi,hiropon,Omuraのどの値も格納することができなくなってしまいます。

この属性のおかげで、テーブルの中の1レコードだけを削除したい場合などに、PRIMARY KEYとして指定されているので、hiroponなど、確実にその1レコードだけを指定することができます。

AUTO_INCREMENT属性

数字型のフィールドに自動的に増加する数字を挿入するのに利用する属性です。この属性は必ずPRIMARY KEY属性と共に利用する必要があります。

また、このAUTO_INCREMENT属性と同じように一つだけのフィールドにしか指定できません。PRIMARY KEY と AUTO_INCREMENTは切り離せない関係であることを覚えておきましょう。

mysql> CREATE TABLE testtable
    -> (
    -> num INT UNSIGNED AUTO_INCREMENT NOT NULL,
    -> PRIMARY KEY(num)
    -> )
    -> AUTO_INCREMENT = 10000;
Query OK, 0 rows affected (0.00 sec)

mysql> DESCRIBE testtable
    -> ;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| num   | int(10) unsigned |      | PRI | NULL    | auto_increment |
+-------+------------------+------+-----+---------+----------------+
1 row in set (0.00 sec)

PRIMARY KEY()属性は、テーブル作成のSQL文の最後に記述し、()内にフィールドの名前を指定します。AUTO_INCREMENTはフィールドのオプションとして指定します。そして、テーブル作成のSQL文を閉じて、閉じた後にAUTO_INCREMENTのスタート値を設定します。設定しない場合は1からスタートします。

また、UNSIGENDを用いることで、マイナスの数字は格納できなくなります。また、DefaultがNullになっているのは、AUTO_INCREMENTが指定されたフィールドにNULLを格納することで自動的に数字が1ずつ増加するシステムだからです。

ZEROFILL属性

数字型フィールドに格納したデータの頭に0を付与したいときに用います。例えば、数字フィールドにINT(5) ZEROFILLを指定し、1というデータを格納したい場合、『00001』の様に頭に0が付与され、5桁の数字データが格納されます。PHPで言うならば、$var = sprintf("%05d",$num);の様な感じでしょうか。