最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql多個(gè)TimeStamp設(shè)置的方法解讀

 更新時(shí)間:2012年11月12日 09:18:45   作者:  
timestamp設(shè)置默認(rèn)值是Default CURRENT_TIMESTAMP;timestamp設(shè)置隨著表變化而自動(dòng)更新是ON UPDATE CURRENT_TIMESTAMP;接下來為您詳細(xì)介紹
timestamp設(shè)置默認(rèn)值是Default CURRENT_TIMESTAMP
timestamp設(shè)置隨著表變化而自動(dòng)更新是ON UPDATE CURRENT_TIMESTAMP

但是由于
一個(gè)表中至多只能有一個(gè)字段設(shè)置CURRENT_TIMESTAMP
兩行設(shè)置DEFAULT CURRENT_TIMESTAMP是不行的。

還有一點(diǎn)要注意
復(fù)制代碼 代碼如下:

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 '創(chuàng)建時(shí)間',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新時(shí)間',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT='設(shè)備表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

像這個(gè)設(shè)置也是不行的。
原因是mysql會(huì)默認(rèn)為表中的第一個(gè)timestamp字段(且設(shè)置了NOT NULL)隱式設(shè)置DEFAULAT CURRENT_TIMESTAMP。所以說上例那樣的設(shè)置實(shí)際上等同于設(shè)置了兩個(gè)CURRENT_TIMESTAMP。

分析需求
一個(gè)表中,有兩個(gè)字段,createtime和updatetime。
1 當(dāng)insert的時(shí)候,sql兩個(gè)字段都不設(shè)置,會(huì)設(shè)置為當(dāng)前的時(shí)間
2 當(dāng)update的時(shí)候,sql中兩個(gè)字段都不設(shè)置,updatetime會(huì)變更為當(dāng)前的時(shí)間

這樣的需求是做不到的。因?yàn)槟銦o法避免在兩個(gè)字段上設(shè)置CURRENT_TIMESTAMP

解決辦法有幾個(gè):
1 使用觸發(fā)器
當(dāng)insert和update的時(shí)候觸發(fā)器觸發(fā)時(shí)間設(shè)置。
網(wǎng)上有人使用這種方法。當(dāng)然不懷疑這個(gè)方法的可用性。但是對于實(shí)際的場景來說,無疑是為了解決小問題,增加了復(fù)雜性。
2 將第一個(gè)timestamp的default設(shè)置為0
表結(jié)構(gòu)如下:
復(fù)制代碼 代碼如下:

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 '創(chuàng)建時(shí)間',
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新時(shí)間',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT='設(shè)備表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

這樣的話,你需要的插入和更新操作變?yōu)椋?
insert into device set toid=11,createtime=null;
update device set toid=22 where id=1;

這里注意的是插入操作的createtime必須設(shè)置為null!!
雖然我也覺得這種方法很不爽,但是這樣只需要稍微修改insert操作就能為sql語句減負(fù),感覺上還是值得的。這也確實(shí)是修改數(shù)據(jù)庫最小又能保證需求的方法了。當(dāng)然這個(gè)方法也能和1方法同時(shí)使用,就能起到減少觸發(fā)器編寫數(shù)量的效果了。
3 老老實(shí)實(shí)在sql語句中使用時(shí)間戳。
這個(gè)是最多人也是最常選擇的
表結(jié)構(gòu)上不做過多的設(shè)計(jì):
復(fù)制代碼 代碼如下:

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 '創(chuàng)建時(shí)間',
`updatetime` TIMESTAMP NOT NULL COMMENT '最后更新時(shí)間',
PRIMARY KEY (`id`),
UNIQUE INDEX `toid` (`toid`)
)
COMMENT='設(shè)備表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

這樣你就需要在插入和update的操作的時(shí)候?qū)懭刖唧w的時(shí)間戳。
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
其實(shí)反觀想想,這樣做的好處也有一個(gè):current_timestamp是mysql特有的,當(dāng)數(shù)據(jù)庫從mysql轉(zhuǎn)移到其他數(shù)據(jù)庫的時(shí)候,業(yè)務(wù)邏輯代碼是不用修改的。

ps:這三種方法的取舍就完全看你自己的考慮了。順便說一下,最后,我還是選擇第三種方法。

相關(guān)文章

  • 一篇文章帶你了解MySQL數(shù)據(jù)庫約束

    一篇文章帶你了解MySQL數(shù)據(jù)庫約束

    數(shù)據(jù)庫中要管理很多數(shù)據(jù),但是這些數(shù)據(jù)是否正確、是否非法,光靠人力來檢驗(yàn)是遠(yuǎn)遠(yuǎn)不夠的,因此我們想讓數(shù)據(jù)庫擁有豐富的檢驗(yàn)和校驗(yàn)?zāi)芰?所以便引入了約束,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫約束的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL錯(cuò)誤ERROR 2002 (HY000): Can''t connect to local MySQL server through socket

    MySQL錯(cuò)誤ERROR 2002 (HY000): Can''t connect to local MySQL ser

    這篇文章主要介紹了MySQL錯(cuò)誤ERROR 2002 (HY000): Can't connect to local MySQL server through socket,需要的朋友可以參考下
    2014-10-10
  • MYSQL大表加索引的實(shí)現(xiàn)

    MYSQL大表加索引的實(shí)現(xiàn)

    本文主要介紹了MYSQL大表加索引的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL五步走JDBC編程全解讀

    MySQL五步走JDBC編程全解讀

    JDBC是指Java數(shù)據(jù)庫連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口(?JAVA?API),用來連接?Java?編程語言和廣泛的數(shù)據(jù)庫。從根本上來說,JDBC?是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據(jù)庫,本篇文章我們來了解MySQL連接JDBC的五步走流程方法
    2022-01-01
  • MySQL字段類型與Java實(shí)體類類型對應(yīng)轉(zhuǎn)換關(guān)系詳解

    MySQL字段類型與Java實(shí)體類類型對應(yīng)轉(zhuǎn)換關(guān)系詳解

    這篇文章主要介紹了MySQL字段類型與Java實(shí)體類類型對應(yīng)轉(zhuǎn)換關(guān)系,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • MySQL數(shù)據(jù)庫中的UPDATE(更新數(shù)據(jù))詳解

    MySQL數(shù)據(jù)庫中的UPDATE(更新數(shù)據(jù))詳解

    這篇文章主要詳細(xì)介紹了MySQL的UPDATE語句,包括其基本語法、高級(jí)用法、性能優(yōu)化策略以及注意事項(xiàng),通過示例和實(shí)戰(zhàn),幫助讀者更好地理解和應(yīng)用這一重要的SQL命令,需要的朋友可以參考下
    2024-12-12
  • MySQL在Windows上安裝的詳細(xì)流程

    MySQL在Windows上安裝的詳細(xì)流程

    MySQL 是最流行的數(shù)據(jù)庫管理系統(tǒng) (DBMS) 之一,它輕量、開源且易于安裝和使用,因此對于那些剛開始學(xué)習(xí)和使用關(guān)系數(shù)據(jù)庫的人來說是一個(gè)不錯(cuò)的選擇, 本文主要系統(tǒng)介紹Windows的環(huán)境下MySQL的安裝過程和驗(yàn)證過程,需要的朋友可以參考下
    2024-12-12
  • MySQL命令行下18個(gè)常用命令

    MySQL命令行下18個(gè)常用命令

    在日常的網(wǎng)站維護(hù)和MYSQL數(shù)據(jù)庫管理中,會(huì)用到非常多的MYSQL命令,下面給大家介紹18個(gè)管理MYSQL數(shù)據(jù)庫時(shí)最常使用的命令
    2018-03-03
  • mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作

    mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作

    這篇文章主要介紹了mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作,修改表指的是修改數(shù)據(jù)庫之后中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)
    2022-07-07
  • MySQL禁用InnoDB引擎的方法

    MySQL禁用InnoDB引擎的方法

    這篇文章主要介紹了MySQL禁用InnoDB引擎的方法,針對的Mysql版本是5.5和5.6,使用了兩種不同的配置文件,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

濮阳县| 华阴市| 东海县| 嘉定区| 姚安县| 龙胜| 疏勒县| 封丘县| 梧州市| 洮南市| 尚志市| 承德县| 三都| 青阳县| 汝南县| 内丘县| 泾源县| 龙南县| 鹤岗市| 巫山县| 丽江市| 南召县| 墨竹工卡县| 井研县| 德阳市| 普兰县| 巴林左旗| 徐州市| 和政县| 南城县| 杭锦旗| 吉安市| 灵川县| 瓦房店市| 鹤岗市| 林口县| 金塔县| 临海市| 调兵山市| 渝中区| 南充市|