mysql多个TimeStamp设置
timestamp设置默认值是Default CURRENT_TIMESTAMP
timestamp设置随着表变化而自动更新是ON UPDATE CURRENT_TIMESTAMP
但是由于
一个表中至多只能有一个字段设置CURRENT_TIMESTAMP两行设置DEFAULT CURRENT_TIMESTAMP是不行的。
还有一点要注意
像这个设置也是不行的。
原因是mysql会默认为表中的第一个timestamp字段(且设置了NOT NULL)隐式设置DEFAULAT CURRENT_TIMESTAMP。所以说上例那样的设置实际上等同于设置了两个CURRENT_TIMESTAMP。
一个表中,有两个字段,createtime和updatetime。
1 当insert的时候,sql两个字段都不设置,会设置为当前的时间
2 当update的时候,sql中两个字段都不设置,updatetime会变更为当前的时间
这样的需求是做不到的。因为你无法避免在两个字段上设置CURRENT_TIMESTAMP
解决办法有几个:
1 使用触发器。当insert和update的时候触发器触发时间设置。
网上有人使用这种方法。当然不怀疑这个方法的可用性。但是对于实际的场景来说,无疑是为了解决小问题,增加了复杂性。
2 将第一个timestamp的default设置为0
表结构如下:
`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 最后更新时间,
这样的话,你需要的插入和更新操作变为:
insert into device set toid=11,createtime=null;
update device set toid=22 where id=1;
这里注意的是插入操作的createtime必须设置为null!!
虽然我也觉得这种方法很不爽,但是这样只需要稍微修改insert操作就能为sql语句减负,感觉上还是值得的。这也确实是修改数据库最小又能保证需求的方法了。当然这个方法也能和1方法同时使用,就能起到减少触发器编写数量的效果了。
3 老老实实在sql语句中使用时间戳。这个是最多人也是最常选择的
表结构上不做过多的设计:
这样你就需要在插入和update的操作的时候写入具体的时间戳。
insert device set toid=11,createtime=’2012-11-2 10:10:10’,updatetime=’2012-11-2 10:10:10’
update device set toid=22,updatetime=’2012-11-2 10:10:10’ where id=1
其实反观想想,这样做的好处也有一个:current_timestamp是mysql特有的,当数据库从mysql转移到其他数据库的时候,业务逻辑代码是不用修改的。
ps:这三种方法的取舍就完全看你自己的考虑了。顺便说一下,最后,我还是选择第三种方法。
MySQL 中 datetime 和 timestamp 的区别与选择 MySQL 中常用的两种时间储存类型分别是datetime和 timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择。
mysql TO_DAYS()函数 TO_DAYS(date)给定一个日期date, 返回一个天数 (从年份0开始的天数 )。 select TO_DAYS(NOW()); +----------------+ | TO_DAYS(NOW()) | +----------------+ | 735159 | +------...
Mysql中DATE_SUB函数 在对数据查询或菜单时经常要对指定的时间或时间段进行查询,例如要查询一天内的信息,要查询一周内的信息,要查询一个月内的. 定义和用法 DATE_SUB() 函数从日期减去指定的时间间隔。1.语法 DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式。
MySQL Date 函数 1 NOW() 返回当前的日期和时间。 2 CURDATE() 返回当前的日期。 3 CURTIME() 返回当前的时间。 select NOW() 当前的日期和时间 ,CURDATE() 当前的日期 ,CURTIME() 当前的时间 4 DATE() 函数提取日期或日期/时间表达式的日期部分。
相关文章
- Python——MySQL操作,使用mysql.connector
- MySQL联合查询语法内联、左联、右联、全联
- PHP+MySQL无限级分类(非递归)
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- MySQL高可用性之Keepalived+Mysql(双主热备)
- [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】
- MySQL数据表中内容大小写区分的设置
- Linux系统安装MySql步骤及截屏
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- MySQL保存或更新 saveOrUpdate
- MySQL的锁机制和加锁原理
- Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- MySQL普通索引与唯一索引__mysql中唯一索引和普通索引的用途及区别
- mysql 优化方法有哪些?
- MySQL设置表的字符编码为utf-8
- mySQL内存及虚拟内存优化设置 .
- [MySQL] 导入数据库和表的两种方式
- Python MySQL - mysql-connector 驱动
- MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎
- MYSQL提权之反弹SHELL——数据库提权属于webshell到管理员的纵向提权,本质还是利用udf提权,无非是在mysql自定义函数中使用了反弹shell而已
- mysql设置远程访问权限
- 如何实现MySQL表数据随机读取?从mysql表中读取随机数据
- mysql 终止 存储过程
- Mysql新增字段到大数据表导致锁表
- 查看mysql连接情况,以及连接超时时间设置
- Mysql报错:Can't connect to local MySQL server through socket '/tmp/mysql.sock'