TIMESTAMP型

TIMESTAMPは、DATETIMEと同じで日付+時刻を表しますが、レコード挿入時に値が指定されていないかNULLが指定されていた場合、自動的に現在の時刻に設定される。値が、指定された場合は、その値になる。

mysql> create table test8 ( id int, ts timestamp );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test8 (id) values (1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test8;
+------+----------------+
| id   | ts             |
+------+----------------+
|    1 | 20030930143938 |
+------+----------------+
1 row in set (0.01 sec)

mysql> insert into test8 (id, ts) values (2, NULL);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test8;
+------+----------------+
| id   | ts             |
+------+----------------+
|    1 | 20030930143938 |
|    2 | 20030930144014 |
+------+----------------+
2 rows in set (0.00 sec)

mysql> update test8 set id=3 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test8;
+------+----------------+
| id   | ts             |
+------+----------------+
|    3 | 20030930144043 |
|    2 | 20030930144014 |
+------+----------------+
2 rows in set (0.00 sec)

ただし、テーブル内に複数のTIMESTAMPがあった場合は、最初の1つしか自動的に設定されない。

ENUM型

指定された複数の値のうち1つだけを含む事ができる。値は文字列。

mysql> create table test10 ( id int, os enum("Linux", "Solaris", "Windows") );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test10 (id,os) values (1,"Linux");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test10;
+------+-------+
| id   | os    |
+------+-------+
|    1 | Linux |
+------+-------+
1 row in set (0.00 sec)

リストに含まれない値を、挿入した場合、空文字が入る。

mysql> insert into test10 (id,os) values (2,"Mac");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test10;
+------+-------+
| id   | os    |
+------+-------+
|    1 | Linux |
|    2 |       |
+------+-------+
2 rows in set (0.00 sec)

文字列ではなく数値を指定すると、その数番目の値がしてされたものと見なされる。検索時も同様。
また、値を数値として評価したい場合は、その値が何番目にあるかを返す。

mysql> insert into test10 (id,os) values (3,2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test10;
+------+---------+
| id   | os      |
+------+---------+
|    1 | Linux   |
|    2 |         |
|    3 | Solaris |
+------+---------+
3 rows in set (0.00 sec)

mysql> select * from test10 where os=2;
+------+---------+
| id   | os      |
+------+---------+
|    3 | Solaris |
+------+---------+
1 row in set (0.00 sec)

mysql> select os+0 from test10 where id=3;
+------+
| os+0 |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

SET型

ENUMに似ているが、指定された複数の文字列の値を保持する事ができる。挿入・更新時に指定する値の順番は特に気にする必要はない。

mysql> create table test11 (id int, os set("Linux", "Solaris", "Windows"));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test11 (id,os) values (1,"Linux,Soraris");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test11;
+------+-------+
| id   | os    |
+------+-------+
|    1 | Linux |
+------+-------+
1 row in set (0.00 sec)

mysql> delete from test11;
Query OK, 1 row affected (0.01 sec)

mysql> insert into test11 (id,os) values (1,"Linux,Solaris");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test11;
+------+---------------+
| id   | os            |
+------+---------------+
|    1 | Linux,Solaris |
+------+---------------+
1 row in set (0.00 sec)

mysql> insert into test11 (id,os) values (2,"Windows,Linux");
Query OK, 1 row affected (0.00 sec)

mysql> select * from test11;
+------+---------------+
| id   | os            |
+------+---------------+
|    1 | Linux,Solaris |
|    2 | Linux,Windows |
+------+---------------+
2 rows in set (0.00 sec)

文字列比較をする場合のみ、順番通りに記述する必要がある。

mysql> select * from test11 where os ="Linux,Solaris";
+------+---------------+
| id   | os            |
+------+---------------+
|    1 | Linux,Solaris |
+------+---------------+
1 row in set (0.00 sec)

mysql> select * from test11 where os ="Solaris,Linux";
Empty set (0.00 sec)

SETを数値として、設定・評価した場合は、文字列が存在するかどうかをビット列で表した形になる。
1番目は1、2番目は2、3番目は4、4番目は8、・・・・

mysql> select os as 文字列, os+0 as 10進数, lpad(bin(os+0),6,' ') as 2進数 from test11;
+-----------------------+--------+--------+
| 文字列                 | 10進数 | 2進数   |
+-----------------------+--------+--------+
| Linux                 |      1 |      1 |
| Solaris               |      2 |     10 |
| Linux,Solaris         |      3 |     11 |
| Windows               |      4 |    100 |
| Linux,Windows         |      5 |    101 |
| Solaris,Windows       |      6 |    110 |
| Linux,Solaris,Windows |      7 |    111 |
+-----------------------+--------+--------+
7 rows in set (0.00 sec)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-01-28 (金) 21:32:51 (3063d)