有同学说timestamp字段的规则比较“诡异”。手册里面说的比较复杂,这里简单说明一下MySQL中 timestamp字段的一些规则。
分为两部分
定义规则:
1、 timestamp字段有三个属性:
a) 是否允许NULL。默认为not null。
b) 默认值。可以设定为default CURRENT_TIMESTAMP 或default 某个常量。若定义时缺省,对于第一个出现的timestamp字段,默认为CURRENT_TIMESTAMP,对于其他timestamp字段,默认为 '0000-00-00 00:00:00'。 Default可以指定为null,前提是本字段允许null。
比如声明 field2 timestamp null default null。
c) On update CURRENT_TIMESTAMP。是否在更新其他字段时自动将该timestamp字段修改为当前时间戳。对于第一个出现的timestamp字段,默认为On update CURRENT_TIMESTAMP,对于其他timestamp字段,没有此行为。
2、 default CURRENT_TIMESTAMP 和 On update CURRENT_TIMESTAMP 可以同时修饰一个列。被这两个属性任意一个修饰的列定义为timestamps_with_niladic, 一个表中最多只能存在一个定义为timestamps_with_niladic的列。若超过1个,则建表失败。
以上是定义规则,用于定义建表行为。建表完成以后可以用show create table xxx 来验证上述规则。有了表定义后,我们来看timestamp的使用规则。
=====2013-05-05 修改====
在MySQL 5.6版本修改了上述规则,已经允许一个表中可以有多个字段有timestamp的各种属性
使用规则
1、 在insert或update语句中设置timestamp字段为null时
a) 若该列为not null,则设置为当前时间戳
b) 若该列为允许null, 则设置为null
2、在insert时若缺省,(insert 语句不指定该列的值),则等效于赋默认值。具体值由default部分决定。
3、若一个列有 On update CURRENT_TIMESTAMP 属性,修改本行其他列时会将此timestamp列的值修改为当前时间戳。
了解了上面的规则,再来分析你碰到的情况,看看是不是没那么”诡异“了
相关推荐
此外,MySQL允许在一个表中最多定义两个自动更新的`TIMESTAMP`字段,其中一个可以设置为`CURRENT_TIMESTAMP`作为默认值,另一个可以设置为`ON UPDATE CURRENT_TIMESTAMP`,这样在插入新行或更新行时,这两个字段都会...
在实际应用中,我们经常需要对数据进行自增长和时间戳记录,本文将详细介绍 MySQL 中的自增长和时间字段的使用。 自增长字段 在 MySQL 中,我们可以使用 auto_increment 属性来实现字段的自增长。例如,在创建用户...
在MySQL中,`TIMESTAMP`字段允许最小值'1970-01-01 00:00:01'和最大值'2038-01-19 03:14:07',但'0000-00-00 00:00:00'是作为一个特殊的无效日期值存在。当你试图插入一个非有效日期或者不指定日期时,某些情况下,...
本篇文章将深入探讨Spring Boot如何进行时间类型的全局配置,以及MySQL数据库中时间字段的相关设置。 首先,Spring Boot默认使用Java 8中的`java.time`包,该包提供了更强大的日期时间API。为了全局配置日期和时间...
MySQL中的TIMESTAMP字段类型是用来存储时间戳值的,它可以记录自1970年1月1日00:00:00 UTC(协调世界时)以来的秒数。TIMESTAMP在不同的情境下有不同的用法,这主要体现在它的默认值和更新策略上。 1. **TIMESTAMP ...
在MySQL中,字段类型决定了数据的存储方式、大小和格式。以下是对MySQL5中常见字段类型的详细说明: 1. **整数类型**: - `TINYINT`: 存储范围为-128到127,占用1字节空间。 - `SMALLINT`: 存储范围为-32768到...
时间戳字段在MySQL中经常使用到,比如需要记录一行数据创建的时间或修改的时间时,我们通常会使用时间戳即timestamp字段。本篇文章主要介绍timestamp字段的使用方法及相关参数,希望大家读完能对timestamp有更深的...
本文实例讲述了C#更新SQLServer中TimeStamp字段(时间戳)的方法。分享给大家供大家参考。具体实现方法如下: public partial class Form1 : Form { private SqlConnection mCnn = null; private long TimeStamp...
但是,在自增列和 TIMESTAMP 字段中,这个规则并不适用。向这些字段中插入 NULL 值将会导致插入下一个自动增加的值或者当前的时间戳。 DEFAULT 修饰符 DEFAULT 修饰符可以为字段设定一个默认值。当插入记录时,...
在MySQL中,TIMESTAMP有时区敏感性,而DATETIME是固定的。在Java中,同样使用`java.sql.Timestamp`来表示。 5. **YEAR**:仅存储年份,格式为'YYYY'或'YY'。在Java中,虽然没有直接对应的类型,但通常可以使用`java...
MySQL 字段类型说明 MySQL 是一个功能强大且广泛使用的关系型数据库管理系统,它支持大量的列类型,可以被分为数字类型、日期和时间类型以及字符串(字符)类型。本节对 MySQL 字段类型进行了详细的说明,包括每个...
下面将详细介绍MySQL中的主要字段类型及其长度范围。 #### 整型数据类型 - **TINYINT[(M)][UNSIGNED][ZEROFILL]**:TINYINT 类型用于存储小整数,当没有指定 UNSIGNED 时,其取值范围为 -128 到 127;若指定了 ...
如果是在SQL查询中处理时间,MySQL的UNIX_TIMESTAMP()可能是更自然的选择,因为它可以直接在数据库层面进行计算。而在PHP代码中,time()函数提供了更多的灵活性,特别是在与用户交互或生成动态内容时。 总的来说,...
MySQL 中的字段类型是指数据库表中的每个字段可以存储的数据类型。了解 MySQL 的字段类型和基本操作命令是每个数据库管理员和开发人员的必备知识。 数值类型 MySQL 中有多种数值类型,每种类型都有其特点和使用...
在MySQL 5.6及以后的版本中,推荐的做法是为TIMESTAMP字段显式地设定默认值,如`DEFAULT CURRENT_TIMESTAMP`,或者使用`NULL`作为默认值。这样可以确保代码的清晰性和兼容性,避免未来的警告或错误。 `explicit_...
MySQL数据库系统中,时间数据类型是用来存储日期和时间值的,其中包括`DATE`、`DATETIME`和`TIMESTAMP`。这些类型在某些方面相似,但在其他方面却有着明显的区别。下面将详细介绍`DATETIME`和`TIMESTAMP`的比较,并...
但你可以有多个timestamp字段,其中一些没有`ON UPDATE CURRENT_TIMESTAMP`,它们将只在插入时设置时间。 4. **时间戳与datetime的区别**: - 时间戳timestamp在MySQL中占用4个字节,表示从1970年1月1日到现在的秒...
MySQL是一种广泛使用的开源关系型数据库管理系统,其字段类型是数据库设计中的重要概念,它决定了数据存储的格式和特性。理解并正确选择字段类型对于优化数据库性能、节省存储空间以及确保数据准确性至关重要。以下...