<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        mysql多個TimeStamp設置的方法解讀

        來源:懂視網 責編:小采 時間:2020-11-09 21:11:03
        文檔

        mysql多個TimeStamp設置的方法解讀

        mysql多個TimeStamp設置的方法解讀:timestamp設置默認值是Default CURRENT_TIMESTAMP timestamp設置隨著表變化而自動更新是ON UPDATE CURRENT_TIMESTAMP 但是由于 一個表中至多只能有一個字段設置CURRENT_TIMESTAMP 兩行設置DEFAULT CURRENT_TIMESTAMP是不行
        推薦度:
        導讀mysql多個TimeStamp設置的方法解讀:timestamp設置默認值是Default CURRENT_TIMESTAMP timestamp設置隨著表變化而自動更新是ON UPDATE CURRENT_TIMESTAMP 但是由于 一個表中至多只能有一個字段設置CURRENT_TIMESTAMP 兩行設置DEFAULT CURRENT_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. MySQL 5.6 中 TIMESTAMP有那些變化
      2. MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 參數
      3. MySQL 5.6 中 TIMESTAMP 的變化分析
      4. MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated錯誤
      5. Mysql中的Datetime和Timestamp比較
      6. mysql 數據類型TIMESTAMP
      7. mysql之TIMESTAMP(時間戳)用法詳解
      8. MySQL錯誤TIMESTAMP column with CURRENT_TIMESTAMP的解決方法
      9. 解析mysql中UNIX_TIMESTAMP()函數與php中time()函數的區別
      10. MySQL timestamp自動更新時間分享
      11. mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函數
      12. MySQL timestamp的類型與時區實例詳解
      13. 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        mysql多個TimeStamp設置的方法解讀

        mysql多個TimeStamp設置的方法解讀:timestamp設置默認值是Default CURRENT_TIMESTAMP timestamp設置隨著表變化而自動更新是ON UPDATE CURRENT_TIMESTAMP 但是由于 一個表中至多只能有一個字段設置CURRENT_TIMESTAMP 兩行設置DEFAULT CURRENT_TIMESTAMP是不行
        推薦度:
        標簽: 設置 mysql timestamp
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲网站免费观看| 久久免费视频精品| 日本一道本高清免费| 456亚洲人成在线播放网站| 91免费国产在线观看| 亚洲av无码国产综合专区| 日本精品人妻无码免费大全| 久久综合久久综合亚洲| 精品免费久久久久久成人影院| 一个人免费观看视频在线中文| 亚洲精品女同中文字幕| 毛片a级三毛片免费播放| 亚洲人成网站免费播放| 国产青草视频在线观看免费影院| 亚洲精品无码久久毛片| 全黄大全大色全免费大片| 狠狠亚洲婷婷综合色香五月排名| 亚洲小说图区综合在线| 又爽又高潮的BB视频免费看| 中文字幕av免费专区| 久久久久亚洲AV片无码下载蜜桃| 日本永久免费a∨在线视频| 久久精品国产精品亚洲艾草网美妙 | 亚洲免费中文字幕| 亚洲精品午夜国产va久久| 国产精品免费看香蕉| 久青草国产免费观看| 黑人精品videos亚洲人| 国产精品色拉拉免费看| 日韩欧美亚洲国产精品字幕久久久| 国产精品久久久久免费a∨| 成人亚洲国产va天堂| 亚洲国产一区二区三区| 久久精品一本到99热免费| 亚洲精品乱码久久久久蜜桃| 中文字幕亚洲第一| 在线看片v免费观看视频777 | 亚洲精品第五页中文字幕| 在线观看日本免费a∨视频| 成年网站免费入口在线观看| 国产亚洲高清在线精品不卡|