0814 奇怪的事情
今天又遇到一个奇怪的问题,在找到原因之前,真的觉得很无法理解,不可思议。解决之后也觉得也不过如此,挺有趣的,所以记录一下。
错误信息描述
我的update语句是这么写的:
<update id="updateByGaoxineventid">
UPDATE gst_eventtraffic
<set>
gaoxinstatus = #{status},
isupdate = #{isupdate}
</set>
WHERE gaoxineventid = #{eventid}
</update>
然后用test方法测试,结果报错了,错误信息为:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gst_gxcz.gst_eventstatus' doesn't exist
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: UPDATE gst_eventtraffic SET gaoxinstatus = ?, isupdate = ? WHERE gaoxineventid = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gst_gxcz.gst_eventstatus' doesn't exist
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gst_gxcz.gst_eventstatus' doesn't exist
日志里记录的update语句是对的,可是无法理解的是,它说我没有gst_eventstatus表,可是我操作的明明是gst_eventtraffic表啊。
我在mapper文件里的表名加个1,改成gst_eventtraffic1,然后再启动,报错信息为:
### Error updating database.
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gst_gxcz.gst_eventtraffic1' doesn't exist
这样的错误信息还能理解。我把1去掉再运行,又是这个错:
### Error updating database.
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'gst_gxcz.gst_eventstatus' doesn't exist
见鬼了。。。
这个问题真的,,,无法理解
这个程序是我之前写好的,之前用的是SSM框架,现在我重写了一个,用的是SpringBoot,于是,我把之前SSM框架的也测了下这个方法,结果报的错误也是上面那个。。。可是正式环境上却是能跑的啊。。。真的怀疑人生了。。。
一脸懵逼。我把表删了再建,还是一样。异常。
那我想应该不是我程序的问题,我把sql语句直接在navicat执行:
update gst_eventtraffic set gaoxinstatus='123',isupdate='7' where gaoxineventid='6cebd0e1-5ca5-11e8-8696-0cda411dbe27'
也是报这个错:
[Err] 1146 - Table 'gst_gxcz.gst_eventstatus' doesn't exist
一脸懵逼。
问题所在
最后,总算找到原因了!!!我把gst_eventtraffic.sql文件拿出来,看了里面的内容,在最后,有这么一段信息:
DROP TRIGGER IF EXISTS `trigger_traffic_insert`;
DELIMITER ;;
CREATE TRIGGER `trigger_traffic_insert` AFTER INSERT ON `gst_eventtraffic` FOR EACH ROW begin
update gst_eventstatus set eventstatus=1,updatetime=now();
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `trigger_traffic_update`;
DELIMITER ;;
CREATE TRIGGER `trigger_traffic_update` AFTER UPDATE ON `gst_eventtraffic` FOR EACH ROW begin
update gst_eventstatus set eventstatus=1, updatetime=now();
end
触发器,最后一段,当update之后,会触发gst_eventstatus表的修改。所以它一直提示我说没有gst_eventstatus表!!!!
原因是环境不一样
因为我是从正式环境上拷贝的表,而我只用到gst_eventtraffic表,因此就只拷了这个表,没想到里面有触发器,关联了另一个表。
把gst_eventtraffic表也给导入,以及导入相应的数据,就调通了:
updateByGaoxineventid修改结果:成功
感想
感觉自己分析问题的能力还是有待提高,不够敏锐,排查问题能力有待提高。
如果下次又遇到了这样的问题,我可以很快的解决掉,但是如果不是这个原因,我是否能快速的解决?在碰壁之后,怀疑人生之后,我还是没能冷静下来,重复验证的操作过多,转换方向的速度太慢。
嗯,努力提高自己的能力吧。多点捣鼓,多点训练。