1. 程式人生 > >mysql中TIMESTAMP和DATETIME

mysql中TIMESTAMP和DATETIME

一、TIMESTAMP
create table test_time (
time1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
time2 TIMESTAMP NOT NULL,
time3 DATETIME default null,
time4 DATETIME default ‘2010-01-01 00:00:00’
);

mysql生成表:
CREATE TABLE test_time (
time1 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
time2

timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00’,
time3 datetime DEFAULT NULL,
time4 datetime DEFAULT ‘2010-01-01 00:00:00’
) ENGINE=InnoDB DEFAULT CHARSET=utf8

1、TIMESTAMP列必須有預設值,預設值可以為“0000-00-00 00:00:00”,但不能為null,如果預設是default null,則mysql自動為設定預設值“0000-00-00 00:00:00”。
2、一個表可以存在多個TIMESTAMP列,但只有一個列會根據資料更新而改變為資料庫系統當前值( CURRENT_TIMESTAMP in DEFAULT or ON UPDATE)。mysql> create table test_time ( time1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, time2 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, time3 DATETIME default null, time4 DATETIME default ‘2010-01-01 00:00:00’ );
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause。
3、TIMESTAMP列的預設值是CURRENT_TIMESTAMP常量值。當紀錄資料發生變化的時候,TIMESTAMP列會自動將其值設定為CURRENT_TIMESTAMP。
mysql> select * from test_zxk;
+———————+———————+———————+———————+
| time1 | time2 | time3 | time4 |
+———————+———————+———————+———————+
| 2017-08-31 14:42:39 | 0000-00-00 00:00:00 | 2017-01-01 00:00:00 | 2017-01-01 00:00:00 |
| 2017-08-31 14:43:42 | 0000-00-00 00:00:00 | 2017-01-01 00:00:00 | 2010-01-01 00:00:00 |
| 2017-08-31 14:43:56 | 0000-00-00 00:00:00 | NULL | 2017-01-01 00:00:00 |
+———————+———————+———————+———————+
3 rows in set (0.04 sec)

mysql> update test_zxk set time4 = ‘2017-01-01 00:00:01’where time4 =’2017-01-01 00:00:00’
-> ;
Query OK, 2 rows affected (0.04 sec)
Rows matched: 2 Changed: 2 Warnings: 0

mysql> select * from test_zxk;
+———————+———————+———————+———————+
| time1 | time2 | time3 | time4 |
+———————+———————+———————+———————+
| 2017-08-31 14:44:53 | 0000-00-00 00:00:00 | 2017-01-01 00:00:00 | 2017-01-01 00:00:01 |
| 2017-08-31 14:43:42 | 0000-00-00 00:00:00 | 2017-01-01 00:00:00 | 2010-01-01 00:00:00 |
| 2017-08-31 14:44:53 | 0000-00-00 00:00:00 | NULL | 2017-01-01 00:00:01 |
+———————+———————+———————+———————+
4、TIMESTAMP列建立後的格式是:
time1

timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
這個語句含義,time1欄位未對其設定值時,其預設值是當前時間CURRENT_TIMESTAMP,當紀錄更新時候,自動將a欄位的值設定為 CURRENT_TIMESTAMP。

二、DATETIME

1、DATETIME列可以設定為多個,預設可為null,可以手動設定其值。
2、DATETIME列可以通過hack方式設定預設值,例如:通過觸發器、或者在插入資料時候,將DATETIME欄位值設定為now()。

三、綜上:一般情況,建表時候,建立時間用datetime,更新時間用timestamp。

相關推薦

mysqlTIMESTAMPDATETIME

一、TIMESTAMP create table test_time ( time1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, time2 TIM

MySQLDateDateTime欄位與mybatis的對應關係

MySQL中Date和DateTime欄位與mybatis的對應關係 在MySQL欄位中有Date和DateTime型別,但是java中沒有DateTime型別。 解決辦法: (1)在mybatis插入資料時只要將實體的屬性設定成Timestamp就會對應mysql的DateTime型別

MySQL有關TIMESTAMPDATETIME的總結

轉載自iVictor,原文連結:http://www.cnblogs.com/ivictor/p/5028368.html 一、MySQL中如何表示當前時間? 其實,表達方式還是蠻多的,彙總如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP

MySQLDATE,DATETIMETIMESTAMP型別支援範圍

近日在寫完專案,在insert資料做測試時,發現了一個小問題。 開發工具中報錯如下: ### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrec

MySQL時間型別DATETIMETIMESTAMP、DATE、TIME、YEAR

1.幾個的區別 詳細可以參考:https://www.cnblogs.com/Jie-Jack/p/3793304.html 2.針對時間型別的一些操作 nodejs支援多種格式轉換為時間戳: var str1 = "2017-01-19 13:00:00"; va

Python實現對TimestampDatetime及UTC時間之間的轉換

http://www.jb51.net/article/63654.htm  Python專案中很多時候會需要將時間在Datetime格式和TimeStamp格式之間轉化,又或者你需要將UTC時間轉化為本地時間,本文總結了這幾個時間之間轉化的函式,供大家參考。 一、D

mysqlTimestamp,time,datetime 區別

TIMESTAMP[(M)]時間戳。範圍是’1970-01-01 00:00:00’到2037年。TIMESTAMP列用於INSERT或UPDATE操作時記錄日期和時間。如果你不分配一個值,表中的第一個TIMESTAMP列自動設定為最近操作的日期和時間。也可以通過分配一個NU

mysqlreplicate_wild_do_tablereplicate_do_db區別

lan rep cati mil 多人 pan think lte 避免 使用replicate_do_db和replicate_ignore_db時有一個隱患,跨庫更新時會出錯。 如在Master(主)服務器上設置 replicate_do_db=test(my.conf

MySQLTIMESTAMPDIFFTIMESTAMPADD函數的用法

用法 int blog 函數 mysq second row logs tail TIMESTAMPDIFF 語法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。 說明: 返回日期或日期時間表達式date

mysqlvarcharchar區別(思維導圖整理)

var 但是 系統 mysql 由於 varchar .html nbsp 了解   由於mysql一直是我的弱項(其實各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char區別,所以整理一下,便於以後遺忘。      0.0圖片已經說明一切,但是系

mysqlLOCATECASE WHEN...THEN...ELSE...END結合用法

else case put asdf span 項目 oos bstr col 之前項目中需要寫一個sql,就是查出某個調研詳情中,選A答案,B答案,C答案...F答案的人各有多少人,這個sql也是費了很大的力氣才寫出來,故記下來,方便以後使用。 其中tbl_researc

mysql deletetrncate區別

重新 sql delet use 它的 刪除 掃描 進行 from mysql中刪除表記錄delete from和truncate table的用法區別: MySQL中有兩種刪除表中記錄的方法:(1)delete from語句,(2)truncate table語句。 d

mysql字符集排序規則說明

存儲 blog character 語言 general utf 比較 說明 target 數據庫需要適應各種語言和字符就需要支持不同的字符集(Character Set),每種字符集也有各自的排序規則(Collation)。 一.字符集 字符集,即用於定義字

mysqlconcat group_concat()的用法

sub concat order by 返回 int 連接 插入 sep 結果 一、CONCAT()函數CONCAT()函數用於將多個字符串連接成一個字符串。使用數據表Info作為示例,其中SELECT id,name FROM info LIMIT 1;的返回結果為+--

mysqlnowsysdate的區別

mysql now和sysdatemysql 中now獲取的是sql執行的時間,sysdate獲取的是系統時間在master 和slave 主從過程中會導致時間的不一致導致報錯例如:Unsafe statement written to the binary log using statement form

timestamp datetime

() oca 情況 日期轉換 for 4.0 http date_add sql時間類型 http://blog.csdn.net/dingxingmei/article/details/44677631 情景:在執行SQL語句的時候發現,報錯:[Err] 1067 -

淺談Mysqlwherehaving的區別

where和having的區別一、誤區:不要錯誤的認為having和group by 必須配合使用.二、where和having用法解析:1、 where和having都可以使用的場景: select goods_price,goods_name from goods where goods_price &g

Mysqlunionunion all的用法及區別

employee rom 最終 sel 推薦 china carte 區別 column UNION 用於合並兩個或多個 SELECT 語句的結果集,並消去表中任何重復行。UNION 內部的 SELECT 語句必須擁有相同數量的列,列也必須擁有相似的數據類型。同時,每條 S

timestampdatetime

mss 5.6 rom 中一 相關 函數 sta select time datetime數據類型在MySQL之前占8個字節,5.6之後占5個字節,datetime的範圍1000-01-01 00:00:00------9999-12-31 23:59:59,格式采用YYY

MYSQLTIMESTAMP類型的默認值理解

ins timestamp 數據 fault 當前時間 def 就會 amp nbsp MYSQL中TIMESTAMP類型可以設定默認值,就像其他類型一樣。 1、自動UPDATE 和INSERT 到當前的時間:表:————&