mysql時間字段的創建要點

一般建表時候,創建時間用datetime,更新時間用timestamp。這是非常重要的。

我測試了一下,如果你的表中有兩個timestamp字段,只要你更新任何非timestamp字段的值,則第一個timestamp列會更新成當前時間,而第二人timestamp列的值不變。

————————————————————————-
MySQL5日期類型DATETIME和TIMESTAMP 相關問題詳解

MySQL5的日期類型有三種:DATETIME、DATE和TIMESTAMP,除了DATE用來表示一個不帶時分秒的是日期,另外兩個都帶時分秒。TIMESTAMP還可以精確到毫秒。

其次還有個共性,就是他們的格式“不嚴格”,很自由,一般你認爲對的格式都可以正確插入到數據庫中。

這裏主要解決帶時分秒日期的一些常見問題。

一、IMESTAMP

1、TIMESTAMP列必須有默認值,默認值可以爲“0000-00-00 00:00:00”,但不能爲null。
2、TIMESTAMP列不可以設置值,只能由數據庫自動去修改。
3、一個表可以存在多個TIMESTAMP列,但只有一個列會根據數據更新而改變爲數據庫系統當前值。因此,一個表中有多個TIMESTAMP 列是沒有意義,實際上一個表只設定一個TIMESTAMP列。
4、TIMESTAMP列的默認值是CURRENT_TIMESTAMP常量值。當紀錄數據發生變化的時候,TIMESTAMP列會自動將其值設定爲CURRENT_TIMESTAMP。
5、TIMESTAMP列創建後的格式是:
a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
這個語句含義,a字段的默認值是CURRENT_TIMESTAMP,當紀錄更新時候,自動將a字段的值設置爲 CURRENT_TIMESTAMP。
6、另外,下面的定義從語法角度是對的,但是沒有意義,因爲該字段的值不可更改,永遠只能爲默認值。
b timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00′,

二、DATETIME

1、DATETIME列可以設置爲多個,默認可爲null,可以手動設置其值。
2、DATETIME列不可設定默認值,這是很多人煞費苦心研究的成果,呵呵!
3、DATETIME列可以變相的設定默認值,比如通過觸發器、或者在插入數據時候,將DATETIME字段值設置爲now(),這樣可以做到了,尤其是後者,在程序開發中常常用到。

一般建表時候,創建時間用datetime,更新時間用timestamp。
CREATE TABLE user (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(20) CHARACTER SET gbk NOT NULL,
sex tinyint(1) DEFAULT ‘1′,
state smallint(2) DEFAULT ‘1′,
createtime datetime NOT NULL,
updatetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

三、日期最大值範圍的問題

日期最大範圍的問題不是絕對的,很多人制定一個說不能查過20XX年,這是扯蛋,根本沒這回事。日期的範圍等問題與MySQL的運行模式有關。當然這個範圍很寬廣,足夠祖宗十八代用了,不用擔心這問題了。

相反,要注意的問題是,編程語言對日期範圍的限制,不同的語言,有不同的限制,這裏不做討論了。

四、日期格式轉換

1、字符串轉日期
select STR_TO_DATE(‘2010-03-03 16:41:16′, ‘%Y-%m-%d %H:%i:%s’)

2、日期轉字符串
select DATE_FORMAT(‘2010-03-03 16:41:16′, ‘%Y-%m-%d %H:%i:%s’)

五、日期的中年月日時分秒星期月份等獲取方法

select TIMESTAMP(‘2019-03-03 16:41:16′);

select DATE(‘2019-03-03 16:41:16′);

select YEAR(‘2019-03-03 16:41:16′);

select MONTH(‘2019-03-03 16:41:16′);

select DAY(‘2019-03-03 16:41:16′);

select TIME(‘2019-03-03 16:41:16′);

select CURTIME();

select CURDATE();

select CURRENT_DATE;

select CURRENT_TIME;

select CURRENT_TIMESTAMP;

方式很多,這裏簡單列舉一二。

六、日期的算術運算

相關的函數很多很多,用法也很簡單,一看就會,建議查看MySQL參考手冊。
mysql> SELECT DATE_ADD(‘2019-01-01′, INTERVAL 1 DAY);

-> ‘2019-01-02′

mysql> SELECT DATE_ADD(‘1999-01-01′, INTERVAL 1 HOUR);

-> ‘2019-01-01 01:00:00′

mysql> SELECT DATE_ADD(‘2019-01-30′, INTERVAL 1 MONTH);

-> ‘2019-02-28′

七、日期的大小比較

拿着日當數字,拿着字符串當日期,呵呵,很簡單的。
and update_time > ‘2019-03-02 16:48:41′
and update_time <= ‘2019-03-03 16:51:58′

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章