數據庫:表操做-數據類型(日期類型)

日期類型python

DATE TIME DATETIME TIMESTAMP YEARmysql

做用:存儲用戶註冊時間,文章發佈時間,員工入職時間,出生時間,過時時間等sql

YEAR
            YYYY(1901/2155)

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59')

        DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)

  驗證服務器

mysql> create table t10(born_year year);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t10 values
    -> (1900),
    -> (1901),
    -> (2155),
    -> (2156);
Query OK, 4 rows affected, 2 warnings (0.07 sec)
Records: 4  Duplicates: 0  Warnings: 2

mysql> select * from t10;
+-----------+
| born_year |
+-----------+
|      0000 |
|      1901 |
|      2155 |
|      0000 |
+-----------+
4 rows in set (0.03 sec)

  

============date,time,datetime===========

mysql> create table t11(d date,t time,dt datetime);
Query OK, 0 rows affected (0.05 sec)

mysql> desc t11;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| d     | date     | YES  |     | NULL    |       |
| t     | time     | YES  |     | NULL    |       |
| dt    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.04 sec)

mysql> insert into t11 values(now(),now(),now());
Query OK, 1 row affected, 1 warning (0.10 sec)

mysql> select * from t11;
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2016-11-16 | 15:00:51 | 2016-11-16 15:00:51 |
+------------+----------+---------------------+
1 row in set (0.02 sec)


============timestamp===========
mysql> create table t12(time timestamp);
Query OK, 0 rows affected (0.12 sec)

mysql> insert into t12 values();
Query OK, 1 row affected (0.03 sec)

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

mysql> select * from t12;
+---------------------+
| time                |
+---------------------+
| 2016-11-16 15:03:07 |
| 2016-11-16 15:03:28 |
+---------------------+
2 rows in set (0.00 sec)

  

============注意啦,注意啦,注意啦===========
  1. 單獨插入時間時,須要以字符串的形式,按照對應的格式插入
  2. 插入年份時,儘可能使用4位值
  3. 插入兩位年份時,<=69,以20開頭,好比50,結果2050;>=70,以19開頭,好比71,結果1971
mysql> create table t13(y year);
Query OK, 0 rows affected (0.10 sec)


mysql> insert into t13 values
    -> (50),
    -> (70);
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t13;
+------+
| y    |
+------+
| 2050 |
| 1970 |
+------+
2 rows in set (0.00 sec)

  

============綜合練習===========
mysql> create table student1(
    -> id int,
    -> name varchar(10),
    -> born_year year,
    -> birth date,
    -> class_time time,
    -> reg_time datetime);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into student1 values
    -> (1,'alex',"1995","1995-11-11","11:11:11","2017-11-11 11:11:11"),
    -> (2,'egon',"1997","1997-12-12","12:12:12","2017-12-12 12:12:12"),
    -> (3,'wsb',"1998","1998-01-01","13:13:13","2017-01-01 13:13:13");
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from student1;
+------+------+-----------+------------+------------+---------------------+
| id   | name | born_year | birth      | class_time | reg_time            |
+------+------+-----------+------------+------------+---------------------+
|    1 | alex |      1995 | 1995-11-11 | 11:11:11   | 2017-11-11 11:11:11 |
|    2 | egon |      1997 | 1997-12-12 | 12:12:12   | 2017-12-12 12:12:12 |
|    3 | wsb  |      1998 | 1998-01-01 | 13:13:13   | 2017-01-01 13:13:13 |
+------+------+-----------+------------+------------+---------------------+
3 rows in set (0.00 sec)

  datetime與timestamp的區別spa

在實際應用的不少場景中,MySQL的這兩種日期類型都可以知足咱們的須要,存儲精度都爲秒,但在某些狀況下,會展示出他們各自的優劣。
下面就來總結一下兩種日期類型的區別。

1.DATETIME的日期範圍是1001——9999年,TIMESTAMP的時間範圍是1970——2038年。

2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區。在mysql服務器,
操做系統以及客戶端鏈接都有時區的設置。

3.DATETIME使用8字節的存儲空間,TIMESTAMP的存儲空間爲4字節。所以,TIMESTAMP比DATETIME的空間利用率更高。

4.DATETIME的默認值爲null;TIMESTAMP的字段默認不爲空(not null),默認值爲當前時間(CURRENT_TIMESTAMP),
若是不作特殊處理,而且update語句中沒有指定該列的更新值,則默認更新爲當前時間。
相關文章
相關標籤/搜索