關(guān)于datetime
使用navicat創(chuàng)建表時,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為當(dāng)前時間错沽。
以上建表語句存在的問題就是楼肪,每次update的時候寿桨,會將create_time與update_time都update為當(dāng)前時間了司光,這樣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設(shè)置為DEFAULT CURRENT_TIMESTAMP,這樣在insert時残家,代碼中不需要再手動set這兩個屬性榆俺,mysql會默認將這兩個屬性賦值為當(dāng)前時間。
2.只將update_time設(shè)置為ON UPDATE CURRENT_TIMESTAMP,這樣update時茴晋,只會對update_time重新賦值陪捷,而不會覆蓋create_time。
3.?ON UPDATE CURRENT_TIMESTAMP诺擅,還有一點要注意市袖,當(dāng)mysql檢查到update語句并沒有對記錄的任何屬性進行變更的情況下,它并不會將update_time賦值為當(dāng)前時間(此處可根據(jù)實際需求烁涌,看是否手動set下update_time的值)苍碟。
關(guān)于mybatis的update語句返回值
1. 默認情況下返回的是匹配update條件的記錄數(shù),并不是執(zhí)行update操作的記錄數(shù)撮执。
2.如果想要返回執(zhí)行update操作的記錄數(shù)微峰,可以將數(shù)據(jù)庫連接配置useAffectedRows=true