MySQL数据库TIMESTAMP设置默认值的灵活运用

数据库 MySQL
本文我们主要介绍了MySQL数据库TIMESTAMP设置默认值的灵活运用,是以实际的例子来进行说明的,希望本次的介绍能够对您有所帮助。

MySQL数据库TIMESTAMP设置默认值是本文我们主要要介绍的内容,我们知道,CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段不会改变。

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段将会改变。即时间变为了更新时候的时间。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)

如果有多个TIMESTAMP列,只有***个自动更新。

接下来我们看几个实际的例子:

#1创建一个有两个timestamp字段的表dj1。

  1. root@localhost:test >create table dj1 (a char(1), b timestamp ,c timestamp);   
  2. Query OK, 0 rows affected (0.01 sec) 

 

#2插入两行数据,仅赋值于列A

  1. root@localhost:test >insert into dj1 values (1,null,null);  
  2. Query OK, 1 row affected (0.00 sec)  
  3. root@localhost:test >insert into dj1 values (2,null,null);   
  4. Query OK, 1 row affected (0.00 sec) 

 

#3查询插入数据,b,c两列都使用current timestamp作为默认值。

  1. root@localhost:test >select * from dj1;  
  2. +------+---------------------+---------------------+  
  3. | a | b | c |  
  4. +------+---------------------+---------------------+  
  5. | 1 | 2009-09-09 13:48:40 | 2009-09-09 13:48:40 |   
  6. | 2 | 2009-09-09 13:48:44 | 2009-09-09 13:48:44 |   
  7. +------+---------------------+---------------------+  
  8. 2 rows in set (0.00 sec) 

 

#4更新一行数据,发现b列timestamp被自动更新,而c列保持不变。

  1. root@localhost:test >update dj1 set a=9 where a=1;   
  2. Query OK, 1 row affected (0.00 sec)  
  3. Rows matched: 1 Changed: 1 Warnings: 0  
  4. root@localhost:test >select * from dj1;  
  5. +------+---------------------+---------------------+  
  6. | a | b | c |  
  7. +------+---------------------+---------------------+  
  8. | 9 | 2009-09-09 13:49:08 | 2009-09-09 13:48:40 |   
  9. | 2 | 2009-09-09 13:48:44 | 2009-09-09 13:48:44 |   
  10. +------+---------------------+---------------------+  
  11. 2 rows in set (0.00 sec) 

 

#5再更新一列,仍然如#4

  1. root@localhost:test >update dj1 set a=8 where a=2;   
  2. Query OK, 1 row affected (0.00 sec)  
  3. Rows matched: 1 Changed: 1 Warnings: 0  
  4. root@localhost:test >select * from dj1;  
  5. +------+---------------------+---------------------+  
  6. | a | b | c |  
  7. +------+---------------------+---------------------+  
  8. | 9 | 2009-09-09 13:49:08 | 2009-09-09 13:48:40 |   
  9. | 8 | 2009-09-09 13:49:36 | 2009-09-09 13:48:44 |   
  10. +------+---------------------+---------------------+  
  11. 2 rows in set (0.00 sec) 

 

#6在b列上创建***索引

  1. root@localhost:test >create unique index dj1_idx_u1 on dj1(b);  
  2. Query OK, 2 rows affected (0.01 sec)  
  3. Records: 2 Duplicates: 0 Warnings: 0 

 

#7更新所有行a列,报***性冲突。

  1. root@localhost:test >update dj1 set a=1;  
  2. ERROR 1062 (23000): Duplicate entry '2009-09-09 13:54:45' for key 'dj1_idx_u1' 

 

结论:

1.MySQL默认表的***个timestamp字段为NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性,必须显式定义改变这种行为。

2.MySQL只允许一个timestamp字段拥有[DEFAULT CURRENT_TIMESTAMP |ON UPDATE CURRENT_TIMESTAMP]属性。 我的理解为要么都是DEFAULT CURRENT_TIMESTAMP 要么都是DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

3.修改字段属性值

 

  1. show create table tbl_ledgerrecord;  
  2. alter table tbl_ledgerrecord change intoStorageDate  intoStorageDate timestamp DEFAULT CURRENT_TIMESTAMP; 

 

关于MySQL数据库TIMESTAMP设置默认值的灵活运用的知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. MySQL数据库my.cnf配置文件注释详解
  2. SQL Server数据库复制失败的原因及解决方案
  3. SQL Server 2005数据库游标调用函数实例解析
  4. MySQL数据库中EXPLAIN的使用及其注意事项详解
  5. SQL Server数据库用视图来处理复杂的数据查询关系
责任编辑:赵鹏 来源: ChinaUnix博客
相关推荐

2011-08-23 18:46:27

MySQLTIMESTAMP

2009-12-07 17:20:29

PHP stdClas

2009-10-23 15:30:53

无线接入技术

2019-10-21 15:30:54

JS技巧前端

2011-07-25 16:25:47

2009-02-20 10:59:21

Vista帮助系统使用技巧

2010-04-21 14:56:23

Unix 线程

2010-04-27 17:06:16

AIX vmstat

2009-07-01 17:58:20

JSP

2011-07-08 13:56:00

域控制器服务器

2021-02-25 13:40:17

MySQL数据库默认值

2012-02-04 14:56:52

JP1数据中心

2013-04-07 10:15:34

2013-04-10 10:39:57

2021-07-12 07:08:52

Spring Boot集成框架

2024-01-26 16:28:28

C++动态内存开发

2010-11-23 16:49:42

MySQL设置当前时间

2009-12-01 11:33:03

PHP判断字符串的包含

2012-01-10 10:05:47

文件目录访问控制UGO

2010-05-27 13:32:36

IIS服务安全认证
点赞
收藏

51CTO技术栈公众号