Mysqlデータ型---TIMESTAMP
14871 ワード
ラベル(スペース区切り):MYSQL
TIMESTAMPタイプは4バイトを使用しており、「1970-01-01 00:00:01.00000」から「2038-01-19 03:14:07.9999999」までの範囲である.
MySQLは、TIMESTAMP値を'YYYY-MM-DD HH:MM:SS'形式で表示し、表示幅を19文字に固定します.数値を取得する場合は、TIMESTAMP列に+0を追加します.
TIMESTAMPフィールドは、INSERTまたはUPDATE操作時に日時を記録するために使用されます.値を割り当てない場合、テーブルの最初のTIMESTAMPフィールドは自動的に最近の操作の日付と時間に設定されます.また、NULL値を割り当てることで、TIMESTAMP列を現在の日時に設定することもできます.
TIMESTAMPフィールド定義
現在のタイムスタンプを使用して、値の初期化と自動更新、またはそのいずれかを行うことができます.たとえば、定義時に自動更新を指定できますが、初期化されません.
1.定義時にDEFAULT CURRENT_TIMESTAMPとON UPDATE CURRENT_TIMESTAMP句はすべてあって、列の値はデフォルトで現在のタイムスタンプを使って、そして自動的に更新します
2.DEFAULTまたはON UPDATE句を使用しない場合、DEFAULT CURRENT_と同等です.TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
3 DEFAULT CURRENTのみの場合TIMESTAMP句、ON UPDATE句なし、列値のデフォルトは現在のタイムスタンプですが、自動的に更新されません
4.DEFAULT句がない場合、ON UPDATE CURRENT_があるTIMESTAMP句、フィールドは自動的に更新され、列はNULLとして認識されます.
timestampフィールドのデフォルトはNULLではありません.NULLを受け入れるフィールドを明確に指定する必要があります.そうしないと、エラーが発生します.
5定数をデフォルトに設定
定数DEFAULTがある場合、カラムにはデフォルト値があり、現在のタイムスタンプに自動的に初期化されません.列にON UPDATE CURRENT_がある場合TIMESTAMP句、このタイムスタンプは自動的に更新されます.そうしないと、この列にはデフォルトの定数がありますが、自動的に更新されません.
定数はnull、または1970-01-01 00:00:00から2037-12-31 23:59:59までの値で、他の値はエラーとして報告されます.
デフォルト値を0に設定し、エラーを報告します.
デフォルト設定は0000-00-00 00 00:00:00、エラー
デフォルト設定は1970-01-02 00:00:00、正しい
デフォルト値をNULLに設定するには、このフィールドがNULLを受け入れることを明確に指定する必要があります.そうしないと、エラーが発生します.
適用例
TIMESTAMPタイプは4バイトを使用しており、「1970-01-01 00:00:01.00000」から「2038-01-19 03:14:07.9999999」までの範囲である.
MySQLは、TIMESTAMP値を'YYYY-MM-DD HH:MM:SS'形式で表示し、表示幅を19文字に固定します.数値を取得する場合は、TIMESTAMP列に+0を追加します.
TIMESTAMPフィールドは、INSERTまたはUPDATE操作時に日時を記録するために使用されます.値を割り当てない場合、テーブルの最初のTIMESTAMPフィールドは自動的に最近の操作の日付と時間に設定されます.また、NULL値を割り当てることで、TIMESTAMP列を現在の日時に設定することもできます.
TIMESTAMPフィールド定義
現在のタイムスタンプを使用して、値の初期化と自動更新、またはそのいずれかを行うことができます.たとえば、定義時に自動更新を指定できますが、初期化されません.
1.定義時にDEFAULT CURRENT_TIMESTAMPとON UPDATE CURRENT_TIMESTAMP句はすべてあって、列の値はデフォルトで現在のタイムスタンプを使って、そして自動的に更新します
CREATE TABLE tb1(
id INTEGER,
t1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
mysql> DESC tb1;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)
mysql> INSERT INTO tb1(id) values(1);
Query OK, 1 row affected (0.10 sec)
mysql> select * from tb1;
+------+---------------------+
| id | t1 |
+------+---------------------+
| 1 | 2017-08-30 12:07:00 |
+------+---------------------+
1 row in set (0.00 sec)
mysql> UPDATE tb1 SET id=2 WHERE id=1;
Query OK, 1 row affected (0.20 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from tb1;
+------+---------------------+
| id | t1 |
+------+---------------------+
| 2 | 2017-08-30 12:07:55 |
+------+---------------------+
1 row in set (0.00 sec)
2.DEFAULTまたはON UPDATE句を使用しない場合、DEFAULT CURRENT_と同等です.TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
CREATE TABLE tb2(
id INTEGER,
t1 TIMESTAMP
);
mysql> DESC tb2;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)
3 DEFAULT CURRENTのみの場合TIMESTAMP句、ON UPDATE句なし、列値のデフォルトは現在のタイムスタンプですが、自動的に更新されません
CREATE TABLE tb3(
id INTEGER,
t1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
mysql> DESC tb3;
+-------+-----------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------+-----------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)
4.DEFAULT句がない場合、ON UPDATE CURRENT_があるTIMESTAMP句、フィールドは自動的に更新され、列はNULLとして認識されます.
timestampフィールドのデフォルトはNULLではありません.NULLを受け入れるフィールドを明確に指定する必要があります.そうしないと、エラーが発生します.
mysql> CREATE TABLE tb4(
-> id INTEGER,
-> t1 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-> );
ERROR 1067 (42000): Invalid default value for 't1'
mysql> CREATE TABLE tb4(
-> id INTEGER,
-> t1 TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.23 sec)
mysql> DESC tb4;
+-------+-----------+------+-----+---------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-----------------------------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+---------+-----------------------------+
2 rows in set (0.00 sec)
mysql> INSERT tb4(id) values(1);
Query OK, 1 row affected (0.07 sec)
mysql> SELECT * FROM tb4;
+------+------+
| id | t1 |
+------+------+
| 1 | NULL |
+------+------+
1 row in set (0.00 sec)
mysql> UPDATE tb4 SET id=2 WHERE id=1;
Query OK, 1 row affected (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM tb4;
+------+---------------------+
| id | t1 |
+------+---------------------+
| 2 | 2017-08-30 12:21:13 |
+------+---------------------+
1 row in set (0.00 sec)
5定数をデフォルトに設定
定数DEFAULTがある場合、カラムにはデフォルト値があり、現在のタイムスタンプに自動的に初期化されません.列にON UPDATE CURRENT_がある場合TIMESTAMP句、このタイムスタンプは自動的に更新されます.そうしないと、この列にはデフォルトの定数がありますが、自動的に更新されません.
定数はnull、または1970-01-01 00:00:00から2037-12-31 23:59:59までの値で、他の値はエラーとして報告されます.
デフォルト値を0に設定し、エラーを報告します.
mysql> CREATE TABLE tb5(
-> id INTEGER,
-> t1 TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
-> );
ERROR 1067 (42000): Invalid default value for 't1'
デフォルト設定は0000-00-00 00 00:00:00、エラー
mysql> CREATE TABLE tb5(
-> id INTEGER,
-> t1 TIMESTAMP NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP
-> );
ERROR 1067 (42000): Invalid default value for 't1'
デフォルト設定は1970-01-02 00:00:00、正しい
mysql> CREATE TABLE tb5(
-> id INTEGER,
-> t1 TIMESTAMP NULL DEFAULT '1970-01-02 00:00:00' ON UPDATE CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.34 sec)
mysql> DESC tb5;
+-------+-----------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------------------+-----------------------------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | YES | | 1970-01-02 00:00:00 | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+---------------------+-----------------------------+
2 rows in set (0.00 sec)
デフォルト値をNULLに設定するには、このフィールドがNULLを受け入れることを明確に指定する必要があります.そうしないと、エラーが発生します.
mysql> CREATE TABLE tb5_2(
-> id INTEGER,
-> t1 TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
-> );
ERROR 1067 (42000): Invalid default value for 't1'
mysql> CREATE TABLE tb5_2(
-> id INTEGER,
-> t1 TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.36 sec)
mysql> DESC tb5_2
-> ;
+-------+-----------+------+-----+---------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-----------------------------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+---------+-----------------------------+
2 rows in set (0.00 sec)
mysql> DESC tb5_2;
+-------+-----------+------+-----+---------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-----------------------------+
| id | int(11) | YES | | NULL | |
| t1 | timestamp | YES | | NULL | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+---------+-----------------------------+
2 rows in set (0.00 sec)
適用例
mysql> ALTER TABLE news MODIFY `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Query OK, 0 rows affected (1.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc news;
+------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+-------------------+-----------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(50) | NO | | NULL | |
| thumb | varchar(250) | YES | | NULL | |
| content | text | YES | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)
mysql> ALTER TABLE `news` MODIFY `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc news;
+------------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+-------------------+-----------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(50) | NO | | NULL | |
| thumb | varchar(250) | YES | | NULL | |
| content | text | YES | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
| updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+------------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.00 sec)