目录
一个表中至多只能有一个字段设置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

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何实现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