关于datetime
使用navicat创建表时,datetime类型字段默认如下配置:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ON UPDATE CURRENT_TIMESTAMP,意思是在对记录进行update操作时,默认将该字段update为当前时间。
以上建表语句存在的问题就是,每次update的时候,会将create_time与update_time都update为当前时间了,这样create_time就失去存在意义了。
正确的语句为:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这样语句有以下几个作用:
1.create_time与update_time设置为DEFAULT CURRENT_TIMESTAMP,这样在insert时,代码中不需要再手动set这两个属性,mysql会默认将这两个属性赋值为当前时间。
2.只将update_time设置为ON UPDATE CURRENT_TIMESTAMP,这样update时,只会对update_time重新赋值,而不会覆盖create_time。
3. ON UPDATE CURRENT_TIMESTAMP,还有一点要注意,当mysql检查到update语句并没有对记录的任何属性进行变更的情况下,它并不会将update_time赋值为当前时间(此处可根据实际需求,看是否手动set下update_time的值)。
关于mybatis的update语句返回值
1. 默认情况下返回的是匹配update条件的记录数,并不是执行update操作的记录数。
2.如果想要返回执行update操作的记录数,可以将数据库连接配置useAffectedRows=true
网友评论