目錄
一个表中至多只能有一个字段设置CURRENT_TIMESTAMP
分析需求
1 使用触发器。
2 将第一个timestamp的default设置为0
3 老老实实在sql语句中使用时间戳。
首頁 資料庫 mysql教程 mysql多个TimeStamp设置_MySQL

mysql多个TimeStamp设置_MySQL

Jun 01, 2016 pm 01:38 PM

bitsCN.com

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:这三种方法的取舍就完全看你自己的考虑了。顺便说一下,最后,我还是选择第三种方法。

bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何實作MySQL中查看表格的資料的語句? 如何實作MySQL中查看表格的資料的語句? Nov 08, 2023 pm 01:40 PM

標題:MySQL中查看表格的資料的語句及具體程式碼範例MySQL是一種開源的關係型資料庫管理系統,它被廣泛應用於各種規模的應用程式。在MySQL中,檢視表格的資料是一個非常基礎的操作,以下將介紹如何透過具體的語句和程式碼範例來實現這項操作。首先,我們將介紹透過MySQL命令列工具查看表格的資料的語句及具體程式碼範例。假設我們有一個名為「employees」的表,以下是通

如何實作MySQL中重新命名表的語句? 如何實作MySQL中重新命名表的語句? Nov 08, 2023 pm 12:11 PM

MySQL是一種常用的關聯式資料庫管理系統,它支援重命名表的操作。通常情況下,重新命名表會帶來一定的風險,因此在執行這個操作時應該非常小心謹慎。在本文中,我們將探討如何在MySQL中實作重新命名表的語句,並提供詳細的程式碼範例。在MySQL中,可以使用ALTERTABLE語句來重新命名表。下面是ALTERTABLE重命名語句的基本語法:ALTERTABLEo

什麼是NEAR Protocol幣? NEAR Protocol幣有什麼特色? 什麼是NEAR Protocol幣? NEAR Protocol幣有什麼特色? Mar 04, 2024 pm 11:20 PM

NEARProtocol:可擴展、用戶友好的區塊鏈平台NEARProtocol是一個採用分片技術的區塊鏈平台,旨在應對區塊鏈技術在可擴展性、用戶友好性和安全性方面面臨的挑戰。它為開發者提供了一個高效和用戶友好的平台,使他們能夠輕鬆建立和部署去中心化應用程式(dApps)。 NEARProtocol的設計旨在降低區塊鏈開發的門檻,同時提供高度的效率和安全性。透過採用分片技術,NEARProtocol可以更好地處理大規模交易,並且為用戶提供更快速的交易確認時間。總的來說,NEARProtocol旨在為

如何在Oracle資料庫中設定表格的唯讀權限? 如何在Oracle資料庫中設定表格的唯讀權限? Mar 06, 2024 pm 03:03 PM

在Oracle資料庫中,設定表格的唯讀權限是非常重要的操作,可以保護資料的安全性並防止誤操作。以下將介紹如何在Oracle資料庫中設定表格的唯讀權限,並提供具體的程式碼範例。首先,我們需要了解在Oracle資料庫中,使用者透過授權取得對錶的權限。表的權限包括SELECT(查詢)、INSERT(插入)、UPDATE(更新)和DELETE(刪除)等操作。在這裡,我們將介

安鈦克650電源主機板線介面的接腳數量是多少? (安鈦克650電源接線圖) 安鈦克650電源主機板線介面的接腳數量是多少? (安鈦克650電源接線圖) Jan 03, 2024 am 10:46 AM

安鈦克650w主機板線是幾pin的安鈦克650W電源主機板的電源線通常是24pin的,這是主機板上最大的電源介面。它的作用是連接主機板和電源,為主機板和其他系統組件提供電源。此外,安鈦克650W電源還可能包含其他類型的電源接口,如CPU8pin、PCIe6+2pin等,用於連接CPU和獨立顯示卡等其他組件。主機板走線教學主機板走線是指在設計主機板時,將各個電子元件之間的電路連接起來的過程。在這個過程中,需要考慮電路的穩定性、訊號傳輸的速度和準確性等因素。根據電路圖進行走線時,需注意佈局和選擇適當的線寬和距離,避免

微軟電腦殼建議設定清單—微軟電腦殼建議設定列表 微軟電腦殼建議設定清單—微軟電腦殼建議設定列表 Dec 28, 2023 am 11:36 AM

微軟電腦殼是用來保護電腦的外殼,它不僅能夠提供額外的保護功能,還能夠增添裝飾效果。對於那些希望為自己的電腦增加一些個人化元素的用戶來說,微軟電腦殼是一個非常理想的選擇。微軟電腦殼推薦配置表是一個詳細的表格,列出了適用於不同型號和規格的微軟電腦殼的建議配置。我們將詳細介紹微軟電腦殼推薦配置表,並對其中的一些方面進行解釋說明1.適用型號在推薦配置表中,首先要考慮的是微軟電腦殼的適用型號。不同型號的微軟電腦殼可能有不同的尺寸和形狀,所以需要根據電腦型號選擇合適的殼。配置表中會列出適用於不同型號的微

使用MySQL建立推薦系統表實現推薦系統功能 使用MySQL建立推薦系統表實現推薦系統功能 Jul 02, 2023 am 10:01 AM

使用MySQL建立推薦系統表實現推薦系統功能推薦系統是一種用於根據使用者的喜好和行為給予使用者個人化推薦內容的系統。在推薦系統中,資料庫是一個關鍵的組成部分,它保存了用戶資料、物品資料和使用者-物品互動資料等資訊。 MySQL作為一種常用的關聯式資料庫管理系統,可以用來建立推薦系統表,並實現推薦系統的功能。本文將介紹如何使用MySQL建立推薦系統表,並透過程式碼範例展示

MySQL建立使用者權限表實現使用者權限管理功能 MySQL建立使用者權限表實現使用者權限管理功能 Jul 02, 2023 pm 06:57 PM

MySQL建立使用者權限表實作使用者權限管理功能MySQL是一種常用的關係型資料庫管理系統,它提供了強大的使用者權限管理功能。在一個多用戶的資料庫環境中,合理地管理使用者的權限是非常重要的。本文將介紹如何透過建立使用者權限表來實現使用者權限管理功能,並透過程式碼範例來說明。一、建立權限表首先,我們需要建立一個權限表來儲存使用者的權限資訊。權限表的欄位包含使用者ID(user_

See all articles