1. 程式人生 > 其它 >mysql基礎(7)_列型別之時間日期型

mysql基礎(7)_列型別之時間日期型

技術標籤:MySQLmysqlsql資料庫

時間日期型別

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可以採用兩位數的資料插入,也可以採用四位數的年份插入

。當進行兩位數字插入時,有一個區間劃分,零界點為69和70,當輸入69以下,那麼系統時間為20+數字,如果是70以上,那麼系統時間為19+數字。

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的時候,時間的儲存通常使用時間戳(真正的時間戳),從而用整形來儲存。