有时候,数据库表有这样的需求,要一个记录创建时间,一个记录修改时间。
理想中的设计是这样的,更新时间的初始值和创建时间一样:
- CREATE TABLE `test_table` (
- `id` INT( 10 ) NOT NULL,
- `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- ) ENGINE = INNODB;
或者是这样的,更新时间初始值为空,只有在更新的时候才有值:
- CREATE TABLE `test_table` (
- `id` INT( 10 ) NOT NULL,
- `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `update_time` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- ) ENGINE = INNODB;
这样的建表SQL,是执行不了的,执行时报错,估计这个很多人遇到过吧:
- Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
网上找到个解决方法(只适用于更新时间的初始值和创建时间一样,当然这个也说得过去):
- CREATE TABLE `test_table` (
- `id` INT( 10 ) NOT NULL,
- `create_time` TIMESTAMP NOT NULL DEFAULT 0,
- `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- ) ENGINE = INNODB;
INSERT语句这样写:
- INSERT INTO test_table (id, create_time, update_time) VALUES (1, NULL, NULL);
或者这样写(注意,没有写create_time):
- INSERT INTO test_table (id, update_time) VALUES (1, NULL);
UPDATE语句正常写法(假设test_table.id可以修改):
- UPDATE test_table (id) VALUES (2);
相关推荐
此外,MySQL允许在一个表中最多定义两个自动更新的`TIMESTAMP`字段,其中一个可以设置为`CURRENT_TIMESTAMP`作为默认值,另一个可以设置为`ON UPDATE CURRENT_TIMESTAMP`,这样在插入新行或更新行时,这两个字段都会...
MySQL 设计规范 MySQL 设计规范是指在 MySQL ...MySQL 设计规范涵盖了数据库设计、表和字段命名、字段结构、SQL 语句、性能与效率、索引优化、查询优化等多个方面,为 MySQL 数据库的设计和开发提供了一个系统的指导。
- 如果在创建表时为两个或更多timestamp字段指定`CURRENT_TIMESTAMP`作为默认值,MySQL会抛出错误。你可以为其中一个字段设置`ON UPDATE CURRENT_TIMESTAMP`,而其他字段则不设置,以避免冲突。 8. **时间戳与NULL...
4. **设置默认值**:在只有一个TIMESTAMP列的情况下,可以为其他需要时间戳的列设置默认值,比如'0000-00-00 00:00:00',然后在程序逻辑中处理这些列的更新。 5. **调整自动填充策略**:在允许的情况下,可以调整...
MySQL 中的字段类型是指数据库表中的每个字段可以存储的数据类型。了解 MySQL 的字段类型和基本操作命令是每个数据库管理员和开发人员的必备知识。 数值类型 MySQL 中有多种数值类型,每种类型都有其特点和使用...
在Navicat中,选择SQL Server连接,然后打开“数据库”菜单,选择“设计表”。这将显示所有表的列表。选择你需要迁移的表,右键点击并选择“逆向工程”,这将生成SQL Server数据库的DDL(数据定义语言)脚本。 2. ...
这意味着在同一个表中不能有两个Timestamp字段都使用这两个特性。 面对这种限制,有几种解决策略: 1. **使用触发器**: 创建INSERT和UPDATE触发器来自动设置Timestamp字段的值。虽然这会增加数据库的复杂性,但...
例如,在创建`USER`表时,`REGISTRATION_TIME`和`LAST_LOGIN_TIME`字段被定义为`TIMESTAMP`类型,并分别设置了默认值为`CURRENT_TIMESTAMP`,这意味着每当有新记录插入时,如果没有显式提供时间,则这两个字段将自动...
4. 外键(`FOREIGN KEY`):关联两个表,确保引用完整性。 5. 默认值(`DEFAULT`):指定字段的默认值。 6. 检查(`CHECK`):检查字段值是否满足特定条件,但在MySQL中通常不直接支持。 五、修改与删除 创建表后,...
这个示例对于初学者来说是一个很好的起点,它展示了如何在MySQL中设计和操作数据库表。理解这些基本操作是数据库管理的基础,对于开发人员来说至关重要。通过这种方式,我们可以确保数据的存储和检索符合业务需求,...
1. **降低期望**:如果你无法升级生产环境的MySQL版本,你可以修改你的表设计,只保留一个TIMESTAMP列带有CURRENT_TIMESTAMP特性。例如,可以只让`created`列自动设置时间戳,而不再为`lastUpdated`列设置ON UPDATE ...
在MySQL数据库中,时间戳(Timestamp)和日期时间(DateTime)是两种常见的日期和时间数据类型,用于存储和处理时间信息。在您的项目中遇到的问题是关于DateTime类型的字段在存储时出现了四舍五入的问题,这通常是...
MySQL 大表优化过程详解 MySQL 是一种广泛使用的关系型数据库管理系统,随着...优化 MySQL 大表数据需要考虑多个方面,包括数据库设计、表创建、SQL 编写等。选择合适的解决方案,需要根据实际情况进行分析和比较。
在上面的示例中,我们创建了一个名为 `test_mysql_timestamp` 的表,该表有两个字段:`id` 和 `begin_time`。其中,`begin_time` 字段是一个 TIMESTAMP 类型,具有默认值 CURRENT_TIMESTAMP,且在更新时自动更新为...
在MySQL数据库中,datetime和timestamp是两种常用的日期和时间数据类型,它们虽然都可以用来存储日期和时间信息,但在使用和处理上存在一些显著的区别。本文将深入探讨这两种数据类型的差异以及如何在实际应用中选择...
本讲座由叶金荣分享,主要涵盖了多个关键方面,包括规范、基础规范、命名规范、库表规范、字段规范、索引规范以及开发环境的优化。 1. **基础规范**: - 引擎选择:推荐全面使用InnoDB引擎,因其支持事务处理和...
在这些版本中,如果一个表定义了两个或更多的`TIMESTAMP`列,只有第一个会被自动更新,通常是在插入或更新记录时。为了避免这种限制,可以使用`DATETIME`代替`TIMESTAMP`,因为它没有这样的限制,并且可以存储多列。...
1. **DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP**:当同时使用这两个子句时,`TIMESTAMP`字段在插入新记录时会自动设置为当前时间,并且在之后的任何更新操作中也会自动更新为当前时间。...
- `FOREIGN KEY`: 外键约束,用于建立两个表之间的关联。 - `UNIQUE`: 唯一性约束,确保字段中的值不重复。 - `CHECK`: 检查约束,限制字段值的范围或格式。 5. **示例** 创建一个名为`students`的表,包含`id`...