## MySQL中日期類型的復習
>[info] MySQL5的日期類型有三種:DATETIME、DATE和TIMESTAMP,除了DATE用來表示一個不帶時分秒的是日期,另外兩個都帶時分秒。TIMESTAMP還可以精確到毫秒。
* 其次還有個共性,就是他們的格式“不嚴格”,很自由,一般你認為對的格式都可以正確插入到數據庫中。
* 這里主要解決帶時分秒日期的一些常見問題。
* * * * *
#### 一、TMESTAMP
1. TIMESTAMP列必須有默認值,默認值可以為“0000-00-00 00:00:00”,但不能為null。
2. TIMESTAMP列不可以設置值,只能由數據庫自動去修改。
3. 一個表可以存在多個TIMESTAMP列,但只有一個列會根據數據更新而改變為數據庫系統當前值。因此,一個表中有多個TIMESTAMP 列是沒有意義,實際上一個表只設定一個TIMESTAMP列。
4. TIMESTAMP列的默認值是CURRENT_TIMESTAMP常量值。當紀錄數據發生變化的時候,TIMESTAMP列會自動將其值設定為CURRENT_TIMESTAMP。
5. TIMESTAMP列創建后的格式是:
`字段名 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`
> 這個語句含義,a字段的默認值是CURRENT_TIMESTAMP,當紀錄更新時候,自動將a字段的值設置為 CURRENT_TIMESTAMP。
6. 另外,下面的定義從語法角度是對的,但是沒有意義,因為該字段的值不可更改,永遠只能為默認值。
`字段名 timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00′,`
7. 常用格式:
|序號| 列類型 | 顯示格式 |實例|
|---|---|---|
|1 |TIMESTAMP(14) | YYYYMMDDHHMMSS | 2016-12-01 20:25:38 |
|2 |TIMESTAMP(12) | YYMMDDHHMMSS |2016-12-01 20:25|
|3 |TIMESTAMP(10) | YYMMDDHHMM |2016-12-01 20|
| 4|TIMESTAMP(8) | YYYYMMDD |2016-12-01|
| 5|TIMESTAMP(6) | YYMMDD |2016-12|
|6 |TIMESTAMP(4) | YYMM |2016|
|7 |TIMESTAMP(2) | YY |16|
1. 雖然你建表時定義了列TIMESTAMP(8),但在你進行數據插入與更新時TIMESTAMP列,實際上保存了14位的數據(包括年月日時分秒),只不過在你進行查詢時MySQL返回給你的是8位的年月日數據。如果你使用ALTER TABLE拓寬一個狹窄的TIMESTAMP列,以前被“隱蔽”的信息將被顯示。
2. 同樣,縮小一個TIMESTAMP列不會導致信息失去,除了感覺上值在顯示時,較少的信息被顯示出。
3. 盡管TIMESTAMP值被存儲為完整精度,直接操作存儲值的唯一函數是UNIX_TIMESTAMP();由于MySQL返回TIMESTAMP列的列值是進過格式化后的檢索的值,這意味著你可能不能使用某些函數來操作TIMESTAMP列(例如HOUR()或SECOND()),除非TIMESTAMP值的相關部分被包含在格式化的值中。
>[info]例如,一個TIMESTAMP列只有被定義為TIMESTAMP(10)以上時,TIMESTAMP列的HH部分才會被顯示,
因此在更短的TIMESTAMP值上使用HOUR()會產生一個不可預知的結果。
4. 不合法TIMESTAMP值被變換到適當類型的“零”值(00000000000000)。(DATETIME,DATE亦然)
* * * * *
#### 二、DATETIME
1. DATETIME列可以設置為多個,默認可為null,可以手動設置其值。
2. DATETIME列不可設定默認值,這是很多人煞費苦心研究的成果,呵呵!
3. DATETIME列可以變相的設定默認值,比如通過觸發器、或者在插入數據時候,將DATETIME字段值設置為now(),這樣可以做到了,尤其是后者,在程序開發中常常用到。
>[warning] 一般建表時候,創建時間用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
~~~
#### DATE與DATETIME基本一致,僅是顯示信息豐富些,不再介紹~~
- 前言[隨時更新]
- 開發環境
- 1.Mac環境
- 2.windows環境
- 模型對象
- 1.創建模型對象
- 2.模型初始化
- 數據對象
- 1.定義數據對象
- 2.創建數據對象
- 1.data方法
- 2.setAttr方法
- 3.__set方法
- 4.查詢數據對象
- 1.getData方法
- 2.getAttr方法
- 3.__get方法
- OOP難點總結
- 1.get_class( )實例講解
- 2.get_called_class( )實例講解
- 3.__call( )實例講解
- 3.__callStatic( )實例講解
- 4.call_user_func_array函數[重點]
- 5.普通方法與靜態方法
- 6.在Model源碼中的應用
- 7.new static 延遲靜態綁定
- PHP標準化規范
- 查詢數據
- 1.獲取單條:get靜態方法
- 2.獲取單條:對象查詢
- 3.獲取多條:all靜態方法
- 4.獲取多條:對象查詢
- 5.獲取字段值:value方法
- 6.獲取列值:column方法
- 7.動態查詢:getBy字段名
- 8.助手函數:model查詢
- 9.加載器:Loader類查詢
- 10.數據庫與模型查詢對比
- 新增數據
- 1.sava方法
- 2.savaAll方法
- 3.create靜態方法
- 4.insert靜態調用
- 更新數據
- 1.單條更新:save方法
- 2.批量更新:saveAll方法
- 3.靜態更新:update方法
- 4.查詢類Query直接更新
- 5. 閉包更新
- 刪除數據
- 1.刪除當前記錄:delete
- 2.靜態條件刪除:destory
- 獲取器
- 1.模型方法:set屬性Attr
- 修改器
- 1.set屬性Attr
- 時間戳
- 1.MySQL中日期類型復習
- 2.時間戳功能詳解
- 軟刪除[重點]
- 1.traits詳解[選學內容]
- 2.SoftDelet類源碼分析
- 3. delete實例刪除
- 4.destroy條件刪除
- 5.restore恢復數據
- 類型轉換
- 1. 規則設置
- 2. 實例演示
- 查詢范圍
- 1. 基本概念
- 2.實例演示