MySQL中CURRENT_TIMESTAMP的使用方式
目录
- CURRENT_TIMESTAMP的使用
- timestamp使用CURRENT_TIMESTAMP报错
CURRENT_TIMESTAMP的使用
众所周知,MySQL的日期类型可以使用CURRENT_TIMESTAMP来指定默认值,但是这个跟MySQL的版本及日期的具体类型有关,只有5.6之后的版本才能使用CURRENT_TIMESTAMP作为DATETIME的默认值。
例如:
ALTER TABLE t_user ADD update_time DATETIME DEFAULT CURRENT_TIMESTAMP
在5.6之前的版本,使用CURRENT_TIMESTAMP作为默认值时,就会出现下面的错误
[Err] 1067 - Invalid default value for 'update_time'
在MySQL 5.6.5版本之前,DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP只适用于TIMESTAMP,而且一张表中,最多允许一个TIMESTAMP字段采用该特性。 从MySQL 5.6.5开始, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP同时适用于TIMESTAMP和DATETIME,且不限制数量。
timestamp使用CURRENT_TIMESTAMP报错
项目出现如下错误:
Error updating database.
Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'createTime' cannot be null
数据模型如下:
/* 创建时间不可为空*/ createTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , /* 更新时间不可为空*/ updateTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ,
经过一系列的问题排查,定位到是因为不同版本的MySQL数据库全局变量“explicit_defaults_for_timestamp”的问题。
-- 查看explicit_defaults_for_timestamp默认值 SHOW GLOBAL VARIABLES LIKE "explicit_defaults_for_timestamp"; -- 修改explicit_defaults_for_timestamp默认值 SET @@global.explicit_defaults_for_timestamp=OFF;
参数值为"ON"的情况:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
mysql 数据类型TIMESTAMP
在mysql中timestamp数据类型是一个比较特殊的数据类型,他可以自动在你不使用程序更新情况下只要你更新了记录timestamp会自动更新时间 通常表中会有一个Create date 创建日期的字段,其它数据库均有默认值的选项.MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值! 这样一来,就不是创建日期了,当作更新日期来使用比较好! 因此在MySQL中要记录创建日期还得使用datetime 然后使用NOW() 函数完成! 1: 如
-
mysql之TIMESTAMP(时间戳)用法详解
一.TIMESTAMP的变体 TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如: 1.在创建新记录和修改现有记录的时候都对这个数据列刷新: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 2.在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它: TIMESTAMP DEFAULT CURRENT_TIMESTAMP 3.在创建新记录的时候把这个字段设置为0,以后修改时刷新它: TIMES
-
mysql多个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_INCREME
-
通过实例解析MySql CURRENT_TIMESTAMP函数
在创建时间字段的时候 DEFAULT CURRENT_TIMESTAMP 表示当插入数据的时候,该字段默认值为当前时间 ON UPDATE CURRENT_TIMESTAMP 表示每次更新这条数据的时候,该字段都会更新成当前时间 这两个操作是mysql数据库本身在维护,所以可以根据这个特性来生成[创建时间]和[更新时间]两个字段,且不需要代码来维护 如下: CREATE TABLE `mytest` ( `text` varchar(255) DEFAULT '' COMMENT '内容', `
-
MySQL中CURRENT_TIMESTAMP的使用方式
目录 CURRENT_TIMESTAMP的使用 timestamp使用CURRENT_TIMESTAMP报错 CURRENT_TIMESTAMP的使用 众所周知,MySQL的日期类型可以使用CURRENT_TIMESTAMP来指定默认值,但是这个跟MySQL的版本及日期的具体类型有关,只有5.6之后的版本才能使用CURRENT_TIMESTAMP作为DATETIME的默认值. 例如: ALTER TABLE t_user ADD update_time DATETIME DEFAULT CURR
-
MySQL中CURRENT_TIMESTAMP时间戳的使用详解
目录 前言 解决: 总结 前言 最近在项目中发现一个小问题,数据被更改时,插入记录和更新记录的时间会被同步更新.设置的两个时间create_time.update_time,按照预期来讲,应该是创建记录的时候会同步更新create_time,update_time,而在更新记录的时候,只有update_time会被同步更新.但实际情况却是update记录时,两个time都会被同步更新. 在代码中并没有对时间进行显性的设置,对时间的维护是MySQL本身进行管理的,所以就查看了一下之前同事创建表时的
-
为何不要在MySQL中使用UTF-8编码方式详解
MySQL的UTF-8编码方式 MySQL 从 4.1 版本开始支持 UTF-8,也就是 2003 年,然而目前流行的UTF-8 标准(RFC 3629)是在此之后规定的.正因此,才造就了MySQL中的UTF-8与我们日常开发中的UTF-8不一致,从到导致了些问题.MySQL的UTF-8只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节. 问题复现 有数据库表如下:utf8编码方式 往数据库存一条记录: @Test public void testInsert() { Us
-
mybatis plus实体类中字段映射mysql中的json格式方式
目录 mybatis plus实体类中字段映射mysql中的json格式 1.实体类中有个属性是其他对象 2.那么取出时怎么进行映射呢,有分为两种情况 mybatis-plus 实体 json 处理 本文总共三个步骤 mybatis plus实体类中字段映射mysql中的json格式 1.实体类中有个属性是其他对象 或者是List:在数据库中存储时使用的是mysql的json格式,此时可以用mybatis plus的一个注解 @TableField(typeHandler = JacksonTy
-
MySQL中使用序列Sequence的方式总结
目录 前言 方式一.使用存储过程 一.创建一个包含自增主键的简单表. 二.创建一个存储过程 三.测试 方式二.使用function 一.创建一个生成sequence的函数 二.测试 总结 前言 在Oracle数据库中若想要一个连续的自增的数据类型的值,可以通过创建一个sequence来实现.而在MySQL数据库中并没有sequence.通常如果一个表只需要一个自增的列,那么我们可以使用MySQL的auto_increment(一个表只能有一个自增主键).若想要在MySQL像Oracle中那样使用
-
MySQL中三种关联查询方式的简单比较
看看下面三个关联查询的 SQL 语句有何区别? SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) SELECT * FROM film JOIN film_actor USING (film_id) SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id 最大的不同更多是语法糖,但有一些有意思的东西值得关注. 为了
-
mysql中blob数据处理方式
具体代码如下所示: package epoint.mppdb_01.h3c; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import java.sql.Blob; import java.sql.Connectio
-
python 操作mysql数据中fetchone()和fetchall()方式
fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None fetchall() 返回多个元组,即返回多个记录(rows),如果没有结果 则返回 () 需要注明:在MySQL中是NULL,而在Python中则是None 补充知识:python之cur.fetchall与cur.fetchone提取数据并统计处理 数据库中有一字段type_code,有中文类型和中文类型编码,现在对type_code字段的数据进行统计处理,编码对应的字典如下: {'ys4ng35
-
MySQL中一些鲜为人知的排序方式
前言 ORDER BY 字段名 升序/降序,相信进来的朋友都认识这个排序语句,但遇到一些特殊的排序,单单使用字段名就无法满足需求了,下面给大家介绍几个我遇到过的排序方法: 一.准备工作 为了更好演示与理解,先准备一张学生表,加入编号.姓名.成绩三个字段,插入几条数据,如图: 二.条件排序 需求一:成绩从高到低进行排序 街边卖菜的阿姨都能敲,直接使用 ORDER BY examScore DESC 轻松完成了(如下左图). 需求二:成绩从高到低进行排序,并且没录入成绩的排在最前面 客户体验最重要,
-
Mysql中常用的几种join连接方式总结
目录 1.内连接 2.左连接 3.右连接 4.查询左表独有数据 5.查询右表独有数据 6.全连接 7.查询左右表各自的独有的数据 总结 1.首先准备两张表 部门表: 员工表: 以下我们就对这两张表进行不同的连接操作 1.内连接 作用: 查询两张表的共有部分 语句:Select from tableA A Inner join tableB B on A.Key = B.Key 示例:SELECT * from employee e INNER JOIN department d on e.dep
随机推荐
- Angularjs中数据绑定的实例详解
- AngularJS基础 ng-non-bindable 指令详细介绍
- Swift中通知中心(NotificationCenter)的使用示例
- 详解微信小程序——自定义圆形进度条
- javascript下一个还原html代码的正则
- 正则表达式简介及在C++11中的简单使用教程
- php-fpm 占用CPU过高,100%的解决方法
- javascript 去字符串空格终极版(支持utf8)
- JavaScript匿名函数之模仿块级作用域
- C#微信小程序服务端获取用户解密信息实例代码
- Sortable.js拖拽排序使用方法解析
- JavaScript模拟push
- Android手机端小米推送Demo解析和实现方法
- sql里将重复行数据合并为一行数据使用逗号进行分隔
- jQuery遍历DOM元素与节点方法详解
- jQuery+CSS3折叠卡片式下拉列表框实现效果
- PHP安装攻略:常见问题解答(一)
- php判断当前用户已在别处登录的方法
- 一步步教你3个月打造10万IP的流量(实战演练)
- 基于php双引号中访问数组元素报错的解决方法