一、问题描述
简单描述一下问题的情况:使用达梦的数据库管理工具连接本地达梦数据库 和 使用IDEA连接本地达梦数据库 对同一个表的查询结果不一样。
注意使用的是同一个用户,修改查找的也是同一个表
二、两个会话窗口的第一次查询结果
可以看到TEST表的结构只有两个字段一个是id,一个是name,查找的结果是最初的三条数据
可以看到第一次查询时两个会话窗口的查询结果都相同
三、两个会话窗口的第二次查询结果
在查询之前首先在IDEA的控制台中输入命令插入一条数据(19,'zhaoliu')
可以看到第二次查找时,两个会话窗口查找到的内容也是一样的
四、两个会话窗口的第三次查找结果
在第三次查找之前在达梦的数据库管理中再使用插入语句插入一条内容(20,'liuqi')
这时候发现,IDEA中的查找结果和达梦自带的数据库管理工具的查找结果不一样了......
五、原因
达梦数据库中涉及到一个提交和回滚的概念,在达梦自带的数据库管理工具中使用的更新、删除、插入等sql语句统统都会被放到一起作为一个事务,只有事务提交之后,才会真正对数据库作出修改,否则的话做的操作统统都是无效操作。
那么还有一个问题,既然事务要提交之后才会对数据库作出修改,那么为什么第三次查询的时候,IDEA中查不到结果,但是达梦自带的管理工具却能查找到结果呢?原因很简单,就是因为一个事务中即便不提交也可以查找到提交后才会展示的结果,但是啊,不同的会话窗口是不属于同一个事务的,就像IDEA连接达梦和达梦自带的管理工具连接达梦一样,他们不属于同一个事务,所以呢,DM管理工具不提交之前,IDEA中都是查找不到DM管理工具中对数据做出的修改的。
友情提示:IDEA的查询控制台中不需要使用commit语句来提交事务,具体原因不清楚,可能是因为已经被封装好,只需要我们写sql语句。
六、解决
在DM管理工具中对之前的修改做出提交,然后再次在两个会话中查询结果:
可以看到,在DM管理工具中对修改做出提交之后,IDEA中就可以正常查找到结果了!
作为一个只会使用MySQL的菜鸟,这个问题着实让我困惑了一段时间。