MYSQL 更新时间自动同步与创建时间默认值共存问题

本文作者:苏生米沿

本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259

在使用SQL的时候,希望在更新数据的时候自动填充更新时间,那么在mysql中是如何实现的呢?

如创建表users

CREATE TABLE RS_SIGNUPUSER (
        ID VARCHAR(36)  COMMENT ‘主键(业务功能无关)‘,
        USERNAME VARCHAR(50)  COMMENT ‘姓名‘,
        USERGENDER VARCHAR(3) DEFAULT ‘0‘ COMMENT ‘性别0男1女‘,
        IDCARDNUMBER VARCHAR(18) COMMENT ‘身份证号码‘,
        USERNATION VARCHAR(6) COMMENT ‘民族‘,
        BIRTHDAY DATE  COMMENT ‘生日‘,
        USERAGE INTEGER COMMENT ‘年龄‘,
        MOBILEPHONE VARCHAR(11) COMMENT ‘手机号码‘,
	BZ VARCHAR(6) COMMENT ‘备注‘,
	CREATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT ‘注册时间‘,
        CREATEUSERID VARCHAR(36) COMMENT ‘创建人‘,
	PX INTEGER COMMENT ‘排序‘,
        UPDATEUSERID VARCHAR(20) COLLATE utf8_bin COMMENT ‘更新人‘,
	UPDATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NULL COMMENT ‘更新时间‘,
        CONSTRAINT
	  PRIMARY KEY (ID),
	  UNIQUE KEY(ZONECODE,USERZYBM)

    ) COMMENT =‘注册用户表‘;

其中,UPDATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NULL COMMENT ‘更新时间‘,会在更新的时候自动填充。啦啦啦。高兴吧。

不要高兴如此早,如果你使用的是mysql5.4版本,那么你表创建的时候都会报错,别说更新时间了,看:

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

出错鸟,创建表就失败了。

看5.5版本的时间戳文档:http://dev.mysql.com/doc/refman/5.5/en/timestamp-initialization.html

  • One TIMESTAMP column in a table can have the current timestamp as the default value for initializing the column, as the auto-update value, or both. It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.

可以看到这个版本对时间戳有限制。

再看5.7版本的

http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

已经没有这个限制了。我觉得,低版本的就只能另想办法,手动或者使用触发器来做更新时间这件事情啦。要么就直接升级版本解决问题。。

时间: 2024-11-07 01:48:26

MYSQL 更新时间自动同步与创建时间默认值共存问题的相关文章

linux开机实现时间自动同步

两种方法: 直接在rc.local里敲上ntpdate time.windows.com,开机实现自动同步,推荐第一种 vi /etc/crontab加上一句:00 0 1 * * root ntpdate -s time.windows.com  每月1号执行此任务. time.nist.gov 是一个时间服务器.

linux时间自动同步

1,修正本地时区及ntp服务 #yum -y install ntp#rm -rf /etc/localtime#ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#/usr/sbin/ntpdate -u pool.ntp.org2,自动同步时间#添加下面一段#表示每10分钟同步一次 #crontab -e */10 * * * * /usr/sbin/ntpdate -u pool.ntp.org >/dev/null 2>&

ESXI5.5设置主机的时间自动同步服务 NTP

背景:现在公司的很多线上服务也都通过虚拟化来实现,最近遇到一个小问题,虚拟机上的时间不准确.原来是虚拟机会主动同步宿主机时间,一般虚拟机中都安装vmware tool工具,这个工具会自动和宿主机进行时间同步,  所以宿主机的时间就非常重要. 步骤如下: 1.  然后选中需要设置的主机,并选择"配置"标签,然后选择"时间配置" 2. 点击"时间配置"界面右侧的"属性"进入配置界面 3. 选中"NTP客户端已起用&quo

[转载]如何修改Windows7系统时间自动同步频率

默认情况下,Windows7系统时间同步是一周进行一次自动同步.对于那些对时间有苛刻要求的人默认的频率太低了.下面教大家调整Windows7系统时间同步频率的方法. 操作步骤 1. 注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient项目中的SpecialPollInterval. 2. 将此值的数值数据604800改为86400并选为“十进制(D)”键值意思是时间同步

linux服务器时间自动同步

最常用的是 rdate 服务 安装(centOs为例): yum install -y rdate 用法: rdate -s time-b.nist.gov 执行完以上方法时间就同步了.有的服务器隔一段时间时间就不准了,因此我们要添加定时任务自动同步 设置定时任务: 1.编辑任务文件 vim /etc/crontab 2.在该文件最后一行添加: */3 * * * * root rdate -s time-b.nist.gov 3.重启服务 service crond restart 原文地址:

linux下日期时间自动同步设置(rdate,ntpdate两种方法)

linux下同步时间,至少有两种方法:rdate,ntpdate两种.centos最小化安装默认不安装,先确认已经安装过,否则先安装.其中rdate本身是用来获取远程时间服务器上时间用的,带上 -s 参数,就可以将获取到的时间应用到本地系统. NAME       rdate - get the time via the networkSYNOPSIS       rdate [-p] [-s] [-u] [-l] [-t sec] [host...]DESCRIPTION       rdat

在域控制器上设置NTP时间自动同步的组策略,使域中所有客户机的时间保持一致

默认情况下,客户机会定时与域控制器同步时间,但有些时候客户机却不能与域控制器进行时间同步,出现这种情况往往是因为使用了ghost镜像安装系统的结果,某些ghost镜像系统为了精简系统服务,关闭了Windows Time服务,而Windows Time服务是时间同步所依赖的服务,所以设置NTP之前,必须保证客户机的Windows Time服务是已启动和自动启动状态. 在域控制器上设置NTP,网络上的教程也很多,都有涉及到修改注册表,本人经过试验后发现,修改注册表是非必要的,只需要创建修改组策略即可

在域控制器上设置NTP时间自动同步的组策略,使域中所有客户机的时间保持一致

默认情况下,客户机会定时与域控制器同步时间,但有些时候客户机却不能与域控制器进行时间同步,出现这种情况往往是因为使用了ghost镜像安装系统的结果,某些ghost镜像系统为了精简系统服务,关闭了Windows Time服务,而Windows Time服务是时间同步所依赖的服务,所以设置NTP之前,必须保证客户机的Windows Time服务是已启动和自动启动状态. 在域控制器上设置NTP,网络上的教程也很多,都有涉及到修改注册表,本人经过试验后发现,修改注册表是非必要的,只需要创建修改组策略即可

sql 排序按修改时间,诺修改时间为空与创建时间比较

SELECT id,updated_time,created_time FROM table ORDER BY CASE WHEN IFNULL(updated_time,'')='' THEN created_time ELSE updated_time END DESC, created_time DESC; MYSQL IFNULL函数的使用 MYSQL  IFNULL(expr1,expr2)                  如果expr1不是NULL,IFNULL()返回expr1,