mysql 時間欄位介紹

來源:互聯網
上載者:User

標籤:sql   val   optional   procedure   src   inter   while   because   準備   

mysql時間類型大概有5種,如

1、建立資料庫
create table t1 (    id  int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,    d1_data date,    d2_time time,    d3_datatime datetime,    d4_year year,    d5_timestamp TIMESTAMP);
字串方式插入
INSERT  INTO t1 (d1_data,d2_time,d3_datatime,d4_year,d5_timestamp) VALUES(NOW(),NOW(),NOW(),NOW(),NOW());mysql> select * from t1 where id=1\G*************************** 1. row ***************************          id: 1     d1_data: 2018-06-15     d2_time: 13:50:25 d3_datatime: 2018-06-15 13:50:25     d4_year: 2018d5_timestamp: 2018-06-15 13:50:251 row in set (0.00 sec)INSERT  INTO t1 (d1_data,d2_time,d3_datatime,d4_year,d5_timestamp) VALUES(‘2018-06-15‘,‘13:50:25‘,‘2018-06-15 13:50:25‘,‘2018‘,‘2018-06-15 13:50:25‘);mysql> select * from t1 where id=2\G*************************** 1. row ***************************          id: 2     d1_data: 2018-06-15     d2_time: 13:50:25 d3_datatime: 2018-06-15 13:50:25     d4_year: 2018d5_timestamp: 2018-06-15 13:50:251 row in set (0.00 sec)

1.1、date (數字插入)

mysql> help DATEA date. The supported range is ‘1000-01-01‘ to ‘9999-12-31‘. MySQLdisplays DATE values in ‘YYYY-MM-DD‘ format, but permits assignment ofvalues to DATE columns using either strings or numbers.插入時候可以是字串或者數字20180615‘2018-06-15‘

1.2、time (數字插入)

mysql> help TIMEA time. The range is ‘-838:59:59.000000‘ to ‘838:59:59.000000‘. MySQLdisplays TIME values in ‘HH:MM:SS[.fraction]‘ format, but permitsassignment of values to TIME columns using either strings or numbers.An optional fsp value in the range from 0 to 6 may be given to specifyfractional seconds precision. A value of 0 signifies that there is nofractional part. If omitted, the default precision is 0.mysql> INSERT  INTO t1 (d1_data,d2_time,d3_datatime,d4_year,d5_timestamp) VALUES(20180515,135025,‘2018-06-15 13:50:25‘,‘2018‘,‘2018-06-15 13:50:25‘);Query OK, 1 row affected (0.00 sec)mysql> select * from t1 where id=4\G*************************** 1. row ***************************          id: 4     d1_data: 2018-05-15     d2_time: 13:50:25 d3_datatime: 2018-06-15 13:50:25     d4_year: 2018d5_timestamp: 2018-06-15 13:50:251 row in set (0.00 sec)

1.3、 DATETIME (數字插入)

mysql> help DATETIMEA date and time combination. The supported range is ‘1000-01-0100:00:00.000000‘ to ‘9999-12-31 23:59:59.999999‘. MySQL displaysDATETIME values in ‘YYYY-MM-DD HH:MM:SS[.fraction]‘ format, but permitsassignment of values to DATETIME columns using either strings ornumbers.An optional fsp value in the range from 0 to 6 may be given to specifyfractional seconds precision. A value of 0 signifies that there is nofractional part. If omitted, the default precision is 0.Automatic initialization and updating to the current date and time forDATETIME columns can be specified using DEFAULT and ON UPDATE columndefinition clauses, as described inhttp://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html.20180615135025‘2018-06-15 13:50:25‘儲存的是字串mysql> INSERT  INTO t1 (d1_data,d2_time,d3_datatime,d4_year,d5_timestamp) VALUES(20180515,135025,20180615135025,‘2018‘,‘2018-06-15 13:50:25‘);Query OK, 1 row affected (0.01 sec)mysql> select * from t1 where id=5\G*************************** 1. row ***************************          id: 5     d1_data: 2018-05-15     d2_time: 13:50:25 d3_datatime: 2018-06-15 13:50:25     d4_year: 2018d5_timestamp: 2018-06-15 13:50:251 row in set (0.00 sec)

1.4、 year

mysql> help yearReturns the year for date, in the range 1000 to 9999, or 0 for the"zero" date.

1.5、 timestamp (數字插入)

mysql> help timestampA timestamp. The range is ‘1970-01-01 00:00:01.000000‘ UTC to‘2038-01-19 03:14:07.999999‘ UTC. TIMESTAMP values are stored as thenumber of seconds since the epoch (‘1970-01-01 00:00:00‘ UTC). ATIMESTAMP cannot represent the value ‘1970-01-01 00:00:00‘ because thatis equivalent to 0 seconds from the epoch and the value 0 is reservedfor representing ‘0000-00-00 00:00:00‘, the "zero" TIMESTAMP value.儲存的是時間戳記mysql> INSERT  INTO t1 (d1_data,d2_time,d3_datatime,d4_year,d5_timestamp) VALUES(20180515,135025,20180615135025,‘2018‘,20180615135025);Query OK, 1 row affected (0.01 sec)

總結

以上說明 在插入或者更新時候,值可以是 ‘2018-06-06‘ 時間類型字串 也可以是 20180606 數字,都會經過mysql函數處理存入

100w條資料 比較datatime跟timestamp效率

2、 準備100w條資料

drop PROCEDURE  autoinsert;DELIMITER $$create PROCEDURE autoinsert()  BEGIN    DECLARE i int DEFAULT 1;    DECLARE mytime varchar(19) ;    WHILE (i<1000000) DO      set mytime=date_add(now(),interval i second);      INSERT into t1  (d1_data,d2_time,d3_datatime,d4_year,d5_timestamp) VALUES (mytime,mytime,mytime,date_add(now(),interval i second),mytime);      set i=i+1;    END WHILE ;  END $$DELIMITER ;CALL autoinsert();

2.1、datetime 分析:沒有索引情況下:


大概需要0.22s添加索引
mysql> alter table t1 add key (d3_datatime);


2.2、timestamp分析

沒有索引情況下:

需要0.4s左右添加索引情況後:
ALTER TABLE `t1` add key (d5_timestamp);

100w條資料的理論,datetime比timestamp更快點,底層比較應該都是數字,timestamp可能在時間轉換上消耗更好點吧,在加上索引情況下是沒有區別的,從空間上考慮datetime需要8個位元組,而timestamp只要4個位元組。

mysql 時間欄位介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.