mysql小套路

关于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

你可能感兴趣的:(mysql小套路)