`

mysql在一个表中存储创建时间和最近更新时间

 
阅读更多
原文地址:http://blog.sina.com.cn/s/blog_672b419f0101k63f.html



今天写一段程序,在mysql中创建了一张表,其中有两个字段,一个是createdTS用来存储本记录创建时间,一个是modifiedTS用来存储本记录最近更新时间。
create table test(a varchar(3),
createdTS timestamp,
modifiedTS timestamp);

表的创建插入修改删除没有任何问题,但是查询出来的结果却有出入,问题就是createdTS实际显示的是最近更新时间,而modifiedTS显示创建时间。
mysql在一个表中存储创建时间和最近更新时间

这个问题在于----
使用show create table test;查看生成的create语句
CREATE TABLE `test` (
  `a` char(1) DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8

那么调换createdTS和modifiedTS顺序可否,不是很合理。

最后我使用以下解决方案。
create table test(a varchar(3),
     createdTS datetime,
     modifiedTS timestamp);
搞定!!!
在插入的时候这样写
insert into test values('1',current_timestamp,null);
---------------------------------------------------------------
最后---
insert语句可以这样写

mysql> insert into test values('3',current_timestamp,null);
Query OK, 1 row affected (0.03 sec)

mysql> insert into test values('4',now(),null);
Query OK, 1 row affected (0.03 sec)

mysql> update test set a='33' where a='3';
Query OK, 1 row affected (0.10 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update test set a='44' where a='4';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test;
+------+---------------------+---------------------+
| a    | createdTS           | modifiedTS          |
+------+---------------------+---------------------+
| 11   | 2014-04-10 00:02:25 | 2014-04-10 00:02:43 |
| 22   | 2014-04-10 00:02:27 | 2014-04-10 00:02:48 |
| 33   | 2014-04-10 00:18:34 | 2014-04-10 00:19:19 |
| 44   | 2014-04-10 00:18:46 | 2014-04-10 00:19:28 |
+------+---------------------+---------------------+
分享到:
评论

相关推荐

    MySQL分区表自动创建及删除存储过程

    MySQL分区表是一种优化大型数据表查询效率的技术,它将一个大表分成多个逻辑上相连但物理上独立的部分,每个部分称为一个分区。分区可以按照不同的策略进行,如范围、哈希、列表或复合分区。这样做有助于提高数据...

    mysql触发器之创建多个触发器操作实例分析

    在mysql 5.7.2+版本之前,我们只能为表中的事件创建一个触发器,例如,只能为BEFORE UPDATE或AFTER UPDATE事件创建一个触发器。 mysql 5.7.2+版本解决了这样限制,并允许我们为表中的相同事件和动作时间创建多个...

    数据仓库日期维度表创建存储过程

    创建日期维度表的存储过程是数据仓库建模过程中的一个步骤,它通过执行SQL脚本来自动填充这个表。 在提供的文件中,我们可以看到有三个不同的SQL文件,分别对应于不同的数据库管理系统: 1. `sp_dim_date.sql`: 这...

    mysql日历数据表1900-2100(公历表和农历表).rar

    MySQL日历数据表是数据库设计中的一个重要组成部分,尤其在处理日期和时间相关的应用时,如日历应用、事件管理、中国传统节日提醒等。这个压缩包文件"mysql日历数据表1900-2100(公历表和农历表).rar"包含了从1900年...

    在 MySQL 数据库中创建学生表.zip

    本篇文章将详细讲解如何在MySQL环境中创建一个名为“学生”的数据表,包括所需字段的定义、数据类型的选择以及一些最佳实践。 首先,我们需要了解表的基本结构。在关系型数据库中,表是由行和列组成的,每一行代表...

    在mysql建表中将日期设置为默认取得当前系统时间

    在MySQL数据库管理中,合理地设定表结构是确保数据准确性和效率的关键步骤之一。当涉及到时间戳字段,如用户注册时间或最后登录时间时,将其默认值设为系统当前时间可以极大地方便数据管理和减少不必要的资源消耗。...

    mysql存储过程--根据主表创建一张副表导入数据(分表)

    在存储过程中,根据一张主表去创建一张副表。 在根据需要限制的时间,查询主表里面的数据。将主表的数据插入到新建的副表里面同时将主表的数据删除,使用事物进行控制操作的过程

    MySql示例1:创建账户表及测试数据.zip

    这个示例对于初学者来说是一个很好的起点,它展示了如何在MySQL中设计和操作数据库表。理解这些基本操作是数据库管理的基础,对于开发人员来说至关重要。通过这种方式,我们可以确保数据的存储和检索符合业务需求,...

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    MySQL创建数据库和表

    在MySQL中,可以使用`CREATE DATABASE`语句来创建一个新的数据库。例如,如果我们要创建一个名为`my_database`的数据库,命令如下: ```sql CREATE DATABASE my_database; ``` 执行此命令后,`my_database`就会在...

    mysql日历数据(包括公历表和农历表,1900-2100年)

    MySQL数据库在IT行业中被广泛用于存储和管理各种类型的数据,其中就包括日期和时间信息。在本案例中,我们关注的是一个特殊的数据库设计,涉及到1900年至2100年的日历数据,涵盖了公历和农历两个方面。这个数据库...

    mysql如何设置默认时间为当前时间

    2. **版本控制**:在需要维护数据变更历史的应用场景中,记录每条记录的创建时间和最后更新时间可以帮助追踪数据的变化。 3. **并发控制**:在多用户环境下,使用`TIMESTAMP`字段可以辅助实现乐观锁机制,确保数据的...

    mysql临时表用法分析【查询结果可存在临时表中】

    在描述中提到的一个实例是创建一个临时表来存储特定检修人员的工位检修结果。这个例子中,首先判断是否已存在临时表,如果存在则删除,然后创建新的临时表并填充数据: ```sql -- 删除已存在的临时表(如果存在) ...

    如何在 MySQL 中创建数据库和表.zip

    在MySQL中创建数据库和表是数据库管理的基础操作,对于任何使用MySQL存储数据的应用程序都是至关重要的。MySQL是一种流行的关系型数据库管理系统(RDBMS),它提供了丰富的功能来创建、管理和维护数据库。以下将详细...

    mysql实现自动创建与删除分区

    MySQL数据库在大数据处理中扮演着重要...总之,通过结合存储过程和事件,我们可以实现在MySQL中自动管理时间分区,以适应不断增长的数据量和查询需求。这不仅简化了数据库维护,也有助于优化性能,提高数据管理效率。

    mysql.rar_mysql创建表

    在MySQL中,我们首先需要创建一个数据库来存放我们的数据。可以使用`CREATE DATABASE`语句来实现,如: ```sql CREATE DATABASE 数据库名; ``` 例如,创建一个名为`mydatabase`的数据库: ```sql CREATE DATABASE ...

    mysql存储过程动态创建多列

    本文将深入探讨如何利用MySQL存储过程动态创建多列,这是一个高级功能,尤其适用于需要根据运行时变量或条件动态修改表结构的情况。 ### MySQL存储过程动态创建多列 #### 基本概念 在MySQL中,动态地添加列到一个...

    mysql 的proc 表

    MySQL数据库中的`proc`表是存储过程和函数的元数据表,它包含了关于用户自定义的存储过程和函数的信息。这个表在MySQL的系统数据库`mysql`中,用于记录所有数据库实例上的这些对象的详细信息。`proc.frm`, `proc.MYD...

    mysql自动生成时间1

    当你将一个字段的默认值设置为`CURRENT_TIMESTAMP`,这意味着每当在这个字段没有指定任何值时(例如在插入新记录或更新记录但未改变该字段时),系统会自动将该字段的值设置为当前的日期和时间。 这种配置在数据库...

Global site tag (gtag.js) - Google Analytics