mysql基礎(7)_列型別之時間日期型
時間日期型別
Date
日期型別,系統使用三個位元組來儲存資料:對應的格式為:YYYY-mm-dd,能表示的範圍是從1000-01-01到9999-12-12,初始值為:0000-00-00
Time
時間型別:能表示某個指定的時間,但是系統同樣是提供3個位元組來儲存,對應的格式為:HH:ii:ss,但是mysql中的time型別能夠表示時間範圍要大的多,能表示從-838:59:59~838:59:59,在mysql中具體的用處是用來描述時間段
Datatime
日期時間型別:就是將前面的data和time合併起來表示的時間,使用8個位元組儲存資料,格式為YYYY-mm-dd HH:ii:ss,能表示的區間 1000-01-01 00:00:00 到9999-12-12 23:59:59,其可以為0值:0000-00-00 00:00:00
Timestamp
時間戳型別:mysql中的時間戳只是表示從格林威治事件開始,但是其格式依然是:YYYY-mm-dd HH:ii:ss
Year
年型別:佔用一個位元組來儲存,能表示1900~2155年,但是year有兩種資料插入方式:0~99和四位數的具體年
mysql> create table time_data( -> data_1 date, -> data_2 time, -> data_3 datetime, -> data_4 timestamp, -> data_5 year -> ); Query OK, 0 rows affected (1.79 sec) mysql> desc time_data; +--------+-----------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +--------+-----------+------+-----+-------------------+-----------------------------+ | data_1 | date | YES | | NULL | | | data_2 | time | YES | | NULL | | | data_3 | datetime | YES | | NULL | | | data_4 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | data_5 | year(4) | YES | | NULL | | +--------+-----------+------+-----+-------------------+-----------------------------+ 5 rows in set (0.14 sec)
Null NO :時間戳型別不能為空
Default CURRENT_TIMESTAMP:有預設值,為當前時間戳對應的時間
on update CURRENT_TIMESTAMP:當資料被更新的時候,這個欄位自動更新為當前最新的時間
time型別特殊性:本質是用來表示時間區間,能表示的範圍比較大。在進行(time)時間類型錄入的時候還可以使用一個簡單的日期代替時間,在時間格式之前加一個空格,然後指定一個數字,系統會自動將該數字轉換成天數 * 24小時,再加上後面的時間
timestamp當對應的資料被修改的時候,會自動更新(這個被修改的資料不是自己)。
year可以採用兩位數的資料插入,也可以採用四位數的年份插入
mysql> insert into time_data values('1900-01-01','12:12:12','1900-01-01 12:12:12','1999-01-01 12:12:12',69);
Query OK, 1 row affected (1.54 sec)
mysql> select * from time_data;
+------------+----------+---------------------+---------------------+--------+
| data_1 | data_2 | data_3 | data_4 | data_5 |
+------------+----------+---------------------+---------------------+--------+
| 1900-01-01 | 12:12:12 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2069 |
+------------+----------+---------------------+---------------------+--------+
1 row in set (0.00 sec)
mysql> insert into time_data values('1900-01-01','80:12:00','1900-01-01 12:12:12','1999-01-01 12:12:12',70);
Query OK, 1 row affected (0.00 sec)
-- time型別時間範圍跨度大,year型別可以進行2位數字輸入
mysql> select * from time_data;
+------------+----------+---------------------+---------------------+--------+
| data_1 | data_2 | data_3 | data_4 | data_5 |
+------------+----------+---------------------+---------------------+--------+
| 1900-01-01 | 12:12:12 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2069 |
| 1900-01-01 | 80:12:00 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 1970 |
+------------+----------+---------------------+---------------------+--------+
2 rows in set (0.00 sec)
mysql> insert into time_data values('2020-12-25','12:12:12','1900-01-01 12:12:12','1999-01-01 12:12:12',2020);
Query OK, 1 row affected (0.00 sec)
-- year型別可以進行4位數字輸入
mysql> select * from time_data;
+------------+----------+---------------------+---------------------+--------+
| data_1 | data_2 | data_3 | data_4 | data_5 |
+------------+----------+---------------------+---------------------+--------+
| 1900-01-01 | 12:12:12 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2069 |
| 1900-01-01 | 80:12:00 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 1970 |
| 2020-12-25 | 12:12:12 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2020 |
+------------+----------+---------------------+---------------------+--------+
3 rows in set (0.00 sec)
mysql> update time_data set data_1='2020-12-25' where data_5=2069;
Query OK, 1 row affected (1.62 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- 當同行時間被更改,Timestamp型別時間資料會自動更新
mysql> select * from time_data;
+------------+----------+---------------------+---------------------+--------+
| data_1 | data_2 | data_3 | data_4 | data_5 |
+------------+----------+---------------------+---------------------+--------+
| 2020-12-25 | 12:12:12 | 1900-01-01 12:12:12 | 2020-12-25 22:57:09 | 2069 |
| 1900-01-01 | 80:12:00 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 1970 |
| 2020-12-25 | 12:12:12 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2020 |
+------------+----------+---------------------+---------------------+--------+
3 rows in set (0.00 sec)
mysql> insert into time_data values('2020-12-25','8 12:12:00','1900-01-01 12:12:12','1999-01-01 12:12:12',2020);
Query OK, 1 row affected (0.00 sec)
-- 輸入time型別的時間格式之前加一個空格,然後指定一個數字,系統會自動將該數字轉換成天數 * 24小時,再加上後面的時間
mysql> select * from time_data;
+------------+-----------+---------------------+---------------------+--------+
| data_1 | data_2 | data_3 | data_4 | data_5 |
+------------+-----------+---------------------+---------------------+--------+
| 2020-12-25 | 12:12:12 | 1900-01-01 12:12:12 | 2020-12-25 22:57:09 | 2069 |
| 1900-01-01 | 80:12:00 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 1970 |
| 2020-12-25 | 12:12:12 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2020 |
| 2020-12-25 | 204:12:00 | 1900-01-01 12:12:12 | 1999-01-01 12:12:12 | 2020 |
+------------+-----------+---------------------+---------------------+--------+
4 rows in set (0.00 sec)
補充:PHP中有著非常強大的時間日期轉換函式:date 將時間戳轉換成想要的格式,strotime又可以將很多格式轉換成對應的時間戳。PHP通常不需要資料庫來幫助處理這麼複雜的時間日期,所以通常配合PHP的時候,時間的儲存通常使用時間戳(真正的時間戳),從而用整形來儲存。