MySQL timestamp自动更新时间分享

通常表中会有一个Create date 创建日期的字段,其它数据库均有默认值的选项。MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值!

这样一来,就不是创建日期了,当作更新日期来使用比较好!

因此在MySQL中要记录创建日期还得使用datetime 然后使用NOW() 函数完成!

1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
在创建新记录和修改现有记录的时候都对这个数据列刷新

2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP  在创建新记录的时候把这个
字段设置为当前时间,但以后修改时,不再刷新它

3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录的时候把这个字段设置为0

、自动UPDATE 和INSERT 到当前的时间:
表:
---------------------------------
Table Create Table
------ --------------------------

CREATE TABLE `t1` (   `p_c` int(11) NOT NULL,  `p_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP   ) ENGINE=InnoDB DEFAULT CHARSET=gb2312

数据:

1 2007-10-08 11:53:35
2 2007-10-08 11:54:00

insert into t1(p_c) select 3;update t1 set p_c = 2 where p_c = 2;

数据:

1 2007-10-08 11:53:35
2 2007-10-08 12:00:37
3 2007-10-08 12:00:37

2、自动INSERT 到当前时间,不过不自动UPDATE。

表:
---------------------------------
Table Create Table
------ ---------------------------

CREATE TABLE `t1` (   `p_c` int(11) NOT NULL,  `p_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP  ) ENGINE=InnoDB DEFAULT CHARSET=gb2312

数据:

insert into t1(p_c) select 4;update t1 set p_c = 3 where p_c = 3;

1 2007-10-08 11:53:35
2 2007-10-08 12:00:37
3 2007-10-08 12:00:37
4 2007-10-08 12:05:19

3、一个表中不能有两个字段默认值是当前时间,否则就会出错。不过其他的可以。
表:
---------------------------------
Table Create Table
------ --------------------------

CREATE TABLE `t1` (   `p_c` int(11) NOT NULL,  `p_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  `p_timew2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'  ) ENGINE=InnoDB DEFAULT CHARSET=gb2312

数据:
1 2007-10-08 11:53:35 0000-00-00 00:00:00
2 2007-10-08 12:00:37 0000-00-00 00:00:00
3 2007-10-08 12:00:37 0000-00-00 00:00:00
4 2007-10-08 12:05:19 0000-00-00 00:00:00

比较之下,我的语句少了“on update CURRENT_TIMESTAMP”或多了“default CURRENT_TIMESTAMP”。如此一来,这个timestamp字段只是在数据insert的时间建立时间,而update时就不会有变化了。当然,如果你就是想达到这个目的倒也无所谓

1: 如果定义时DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句都有,列值为默认使用当前的时间戳,并且自动更新。

2: 如果不使用DEFAULT或ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

3: 如果只有DEFAULT CURRENT_TIMESTAMP子句,而没有ON UPDATE子句,列值默认为当前时间戳但不自动更新。

4: 如果没用DEFAULT子句,但有ON UPDATE CURRENT_TIMESTAMP子句,列默认为0并自动更新。

5: 如果有一个常量值DEFAULT,该列会有一个默认值,而且不会自动初始化为当前时间戳。如果该列还有一个ON UPDATE CURRENT_TIMESTAMP子句,这个时间戳会自动更新,否则该列有一个默认的常量但不会自动更新。

换句话说,你可以使用当前的时间戳去初始化值和自动更新,或者是其中之一,也可以都不是。(比如,你在定义的时候可以指定自动更新,但并不初始化。)下面的字段定义说明了这些情况:

(0)

相关推荐

  • MySQL timestamp的类型与时区实例详解

     MySQL timestamp的类型与时区 MySQL的timestamp类型时间范围between '1970-01-01 00:00:01' and '2038-01-19 03:14:07',超出这个范围则值记录为'0000-00-00 00:00:00',该类型的一个重要特点就是保存的时间与时区密切相关,上述所说的时间范围是UTC(Universal Time Coordinated)标准,指的是经度0度上的标准时间,我国日常生活中时区以首都北京所处的东半球第8区为基准,统一使用东8区

  • mysql之TIMESTAMP(时间戳)用法详解

    一.TIMESTAMP的变体 TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如: 1.在创建新记录和修改现有记录的时候都对这个数据列刷新: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 2.在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它: TIMESTAMP DEFAULT CURRENT_TIMESTAMP 3.在创建新记录的时候把这个字段设置为0,以后修改时刷新它: TIMES

  • mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数

    from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 '%Y%m%d' 主要是将返回值格式化 例如: mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' ) ->20071120 mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' ) ->2007年11月20 UNIX_TI

  • SQL计算timestamp的差值的方法

    SQL计算timestamp的差值的方法 概述 有时候我们需要按照时间找出某些记录,比如说:算出离销售时间前1个小时的记录. 通常我们可以使用MYSQL的timestampdiff函数来做,但是这样没法使用到索引,如果数据量大的话,会造成慢查询. 用代码计算出时间后再传给SQL 我们可以利用JAVA代码,先把时间计算好,然后传给SQL语句,避免使用MYSQL的函数. public long xxxx(long sellTimeFrom){ Calendar calendar = Calendar

  • MySQL错误TIMESTAMP column with CURRENT_TIMESTAMP的解决方法

    在部署程序时遇到的一个问题,MySQL定义举例如下: 复制代码 代码如下: CREATE TABLE `example` (  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,  `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,  `lastUpdated` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (`id`)

  • Sqlserver timestamp数据类使用介绍

    在SQL Server中联机丛书是这样说的: SQL Server timestamp 数据类型与时间和日期无关.SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序.实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法.每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1.这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系. 我用口水话解释一下便于理解:

  • MySQL timestamp自动更新时间分享

    通常表中会有一个Create date 创建日期的字段,其它数据库均有默认值的选项.MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值! 这样一来,就不是创建日期了,当作更新日期来使用比较好! 因此在MySQL中要记录创建日期还得使用datetime 然后使用NOW() 函数完成! 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录和修改现有记

  • 用mysql触发器自动更新memcache的实现代码

    mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的自动更新.简单记录一下安装测试步骤. 安装步骤 安装memcached,这个步骤很简单,随处可见 安装mysql server 5.1RC,安装办法也很大众,不废话了 编译libmemcached,解压后安装即可./configure; make; make install 编译Memcached Functio

  • MySQL的源码安装及使用UDFs进行数据自动更新的教程

    MySQL的源码安装 1. 安装依赖组件 # yum install gcc gcc-c++ ncurses-devel perl -y 2. 安装cmake # wget http://www.cmake.org/files/v2.8/cmake-2.8.12.tar.gz # tar zxvf cmake-2.8.12.tar.gz # cd cmake-2.8.12 # ./bootstrap # make && make install 3. 安装bison # wget http

  • mysql 实现添加时间自动添加更新时间自动更新操作

    在数据库使用中经常使用到时间字段.常用的有创建时间和更新时间. 然而在使用中想要创建时间在创建的时候自动设置为当前时间,更新时间在更新时自动更新为当前时间. 创建表 stu CREATE TABLE `stu` ( 'id' int NOT NULL AUTO_INCREMENT, 'createTime' timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 'moditiyTime' timestamp DEFAULT CURRENT_TIM

  • mysql数据库自动添加创建时间及更新时间

    目录 前言 1.描述 2 完整的操作 SQL 2.1 修改现有表中的时间列默认值为自动获取 2.2 现有表中添加时间列设置默认值 2.3 创建表时时间列设置默认值 总结 前言 志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹. 1.描述 在mysql中,添加表中的列类型为时间类型(

  • MySQL中创建时间和更新时间的自动更新的实现示例

    目录 一.需求 二.方案 创建时间(创建日期).修改时间(修改日期)设置为自动生成 创建日期的自动生成 更新日期的自动生成 一.需求 当新增记录的时候,MySQL自动将系统的当前时间 set 到创建时间和更新时间这两个字段中.当更新记录的时候,MySQL 只 update 更新时间字段的时间,而不修改创建时间字段对应的值. 二.方案 找到表中对应的创建时间和更新时间的字段,将其修改如下: 创建时间字段creat_time timestamp NULL DEFAULT CURRENT_TIMEST

  • PostgreSQL更新表时时间戳不会自动更新的解决方法

    PostgreSQL更新表时时间戳不会自动更新的解决方法,具体如下 操作系统:CentOS7.3.1611_x64 PostgreSQL版本:9.6 问题描述 PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新. 在mysql中可以在创建表时定义自动更新字段,比如 : create table ab ( id int, changetimestamp timestamp NOT NULL default CURRENT_TIMEST

  • linux下mysql如何自动备份shell脚本

    Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本,结合 crontab,定时备份数据库.其实非常简单,主要就是使用 MySQL 自带的 mysqldump 命令. #!/bin/bash # Shell script to backup MySql database # To backup Nysql databases file to /backup dir and later pick up by your # script. You can s

  • PostgreSQL自动更新时间戳实例代码

    目录 什么是PostgreSQL时间戳数据类型? 一.为什么 二.如何做 总结 什么是PostgreSQL时间戳数据类型? 在PostgreSQL中,下一个数据类型是 TIMESTAMP ,它可以存储 TIME 和 DATE 值.但它不支持任何 时区数据.这意味着当我们转换数据库服务器的 时区时, 时间戳值将存储在数据库中,并且不能重复修改. 在PostgreSQL中,TIMESTAMP数据类型分为 两种时间数据类型,如下: timestamp timpstamptz Timestamp: :

  • mysql timestamp比较查询遇到的坑及解决

    目录 timestamp比较查询遇到的坑 timestamp查询范围问题 timestamp比较查询遇到的坑 记得之前京东要求mysql建表的时候update_time 为timestamp,create_time为datetime.后来阿里的编码规范里要求两者都要是datetime类型的. 对于timestamp和datetime的区别好多地方都有介绍.有时在想为什么京东会要求update_time必须timestamp呢?难道是因为占用的空间少点?还是只有timestamp才能设置默认值(o

随机推荐