简单sql语句实现触发器功能
相信很多人在开发的时候都很头疼触发器、存储过程这一类的东西,真是又难用又麻烦,而且老一辈的开发人员都很喜欢这样去使用,大量的sql语句来实现功能,半天见不到一句java代码,反正我是很头疼这个触发器和存储过程这一类的东西,所以我分享一个新建两个字段实现触发器的功能:
首先先介绍项目中遇到的需求,需要把本地数据同步到国家局里,就要考虑到有的数据同步过了,但是客户又修改了数据,我们要做的就是把未同步的数据和客户修改过的数据一起同步到国家局里,遇到这个需求,第一反应就是使用触发器,但是这个操蛋的触发器之前搞过我一次,被整的半死,所以这次我要避开使用触发器。(前提:我使用的是MySQL,MySQL版本不能太低)
下面是实现需求的具体过程:
1、数据库新建两个字段:
SYNC_TIME(同步时间):就是在同步到国家局的时候把当前时间插入到这个字段里面
LAST_CHANGE_TIME(最后一次修改时间):这里有个小技巧就是ON UPDATE,这样在这条数据被改动的时候就会顺带跟新这个字段的时间为当前修改的时间。
数据库插入语句如下:
ALTER TABLE `数据库`.`表名`
ADD COLUMN `SYNC_TIME` DATETIME NULL,
ADD COLUMN `LAST_CHANGE_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NULL AFTER `SYNC_TIME`;
2、这一步做到了下一步就好办了,在同步的时候筛选SYNC_TIME为空(未同步),并且SYNC_TIME小于LAST_CHANGE_TIME(同步时间小于修改时间,是客户有修改过的数据),把这两个条件加入查询出来的数据就是未同步和客户有修改过的数据,这样就完美避开了使用触发器了。
我使用的是Navicat工具,可以直接新建字段的时候设置【根据当前时间戳更新】,如下图: