其它组里的同学今天遇到一个难题,使用typeorm过程中insert时而生效,时而无效。他怀疑是这个orm没有提交事务,但是对这个问题不知道该怎么进行验证。
本身对这个框架,并没有过了解。并且由于业务的复杂性,这个问题出现的原因可能性很多。比如数据其实插入了,但是由于某个原因回滚了;也可能如他所说,事务没有提交;也有可能这里是插入成功了,但是由于系统bug又被其它的接口删除了。总之要从代码去排查,一时半会儿还没有什么思路。
但有一点,他的系统使用的是MySQL数据库,虽然不能准确定位bug点,但是可以将它的问题缩小一定范围,引导他找到一个正确的解决方向。我们可以设置MySQL的执行日志,然后在调试时,查看这个时刻的语句执行情况,这样就能在MySQL服务端,准确把握到底是没有插入语句,还是插入了之后又被删除了。
1.现在Linux环境下,设置日志:
mysql> set global log_output=‘TABLE‘;set global general_log=‘ON‘;
Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)
2.开启MySQL客户端*(如Navicat,也可以在Linux开启的客户端中查看,但不方便):
SELECT event_time,CONVERT(argument USING utf8) FROM `general_log` ORDER BY event_time DESC; #这里的argument是blob类型的数据,需要进行转换才能方便查看
3.此时可以让该同学调试他的接口,在调试过程中,执行一次接口的逻辑,一边在Navicat中执行上述语句,就能够把握执行SQL语句的情况:
此时,我们可以一边调试接口,一边查看sql语句的情况。帮助我们定位代码中的逻辑问题。