程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql多個TimeStamp設置的辦法解讀

mysql多個TimeStamp設置的辦法解讀

編輯:MySQL綜合教程

mysql多個TimeStamp設置的辦法解讀。本站提示廣大學習愛好者:(mysql多個TimeStamp設置的辦法解讀)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql多個TimeStamp設置的辦法解讀正文


timestamp設置默許值是Default CURRENT_TIMESTAMP
timestamp設置跟著表變更而主動更新是ON UPDATE CURRENT_TIMESTAMP

然則因為
一個表中至少只能有一個字段設置CURRENT_TIMESTAMP
兩行設置DEFAULT CURRENT_TIMESTAMP是不可的。

還有一點要留意

CREATE TABLE `device` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',
`createtime` TIMESTAMP NOT NULL COMMENT '創立時光',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最初更新時光',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT='裝備表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

像這個設置也是不可的。
緣由是mysql會默許為表中的第一個timestamp字段(且設置了NOT NULL)隱式設置DEFAULAT CURRENT_TIMESTAMP。所以說上例那樣的設置現實上同等於設置了兩個CURRENT_TIMESTAMP。

剖析需求
一個表中,有兩個字段,createtime和updatetime。
1 當insert的時刻,sql兩個字段都不設置,會設置為以後的時光
2 當update的時刻,sql中兩個字段都不設置,updatetime會變革為以後的時光

如許的需求是做不到的。由於你沒法防止在兩個字段上設置CURRENT_TIMESTAMP

處理方法有幾個:
1 應用觸發器
當insert和update的時刻觸發器觸發時光設置。
網上有人應用這類辦法。固然不疑惑這個辦法的可用性。然則關於現實的場景來講,無疑是為懂得決小成績,增長了龐雜性。
2 將第一個timestamp的default設置為0
表構造以下:

CREATE TABLE `device` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',
`createtime` TIMESTAMP NOT NULL DEFAULT 0 COMMENT '創立時光',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最初更新時光',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT='裝備表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

如許的話,你須要的拔出和更新操作變成:
insert into device set toid=11,createtime=null;
update device set toid=22 where id=1;

這裡留意的是拔出操作的createtime必需設置為null!!
固然我也認為這類辦法很不爽,然則如許只須要略微修正insert操作就可以為sql語句減負,感到上照樣值得的。這也確切是修正數據庫最小又能包管需求的辦法了。固然這個辦法也能和1辦法同時應用,就可以起到削減觸發器編寫數目的後果了。
3 老誠實其實sql語句中應用時光戳。
這個是最多人也是最常選擇的
表構造上不做過量的設計:

CREATE TABLE `device` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',
`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創立時光',
`updatetime` TIMESTAMP NOT NULL COMMENT '最初更新時光',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT='裝備表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

如許你就須要在拔出和update的操作的時刻寫入詳細的時光戳。
insert device set toid=11,createtime='2012-11-2 10:10:10',updatetime='2012-11-2 10:10:10'
update device set toid=22,updatetime='2012-11-2 10:10:10' where id=1
其實反不雅想一想,如許做的利益也有一個:current_timestamp是mysql獨有的,當數據庫從mysql轉移到其他數據庫的時刻,營業邏輯代碼是不消修正的。

ps:這三種辦法的棄取就完整看你本身的斟酌了。趁便說一下,最初,我照樣選擇第三種辦法。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved