0814 奇怪的事情

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_30531261/article/details/81676181

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修改结果:成功

感想

感觉自己分析问题的能力还是有待提高,不够敏锐,排查问题能力有待提高。

如果下次又遇到了这样的问题,我可以很快的解决掉,但是如果不是这个原因,我是否能快速的解决?在碰壁之后,怀疑人生之后,我还是没能冷静下来,重复验证的操作过多,转换方向的速度太慢。

嗯,努力提高自己的能力吧。多点捣鼓,多点训练。

猜你喜欢

转载自blog.csdn.net/weixin_30531261/article/details/81676181