关于Mybatis中update语句更新表中数据的流程!(有问题没有搞清楚)

   今天在写公司API接口时遇到Mybatis中实现交换监控点顺序时具体该怎么使用update,由此想到update语句执行流程是怎样?

 1.更新一个表中的一列

        例如:update 表A 

                    set B=C 

                    where  id=100(过滤条件)

    此时执行顺序时由上到下,先定位到表A,然后找到列B设定值为A,最后通过过滤条件确定下要更新id值为100的行。

2.更新表中两列数据。

        例如:update 表A

                      set 列1=B,列2=C

                       where  id=100(过滤条件)

    此时执行顺序为由上到下,由左到右。首先定位到表A,然后定位到列1设定值为B,列2设定值为C,最后通过过滤条件确定下要更新id值为100的行。

3.同时更新同一张表两次

    实现方法如下图所示,这里是通过上传两个不同的id定位到两行,然后交换两行中某两列的数据,从而达到交换监控点顺序的目的。

 


(1):这里的update data_point p , data_point o的目的是将表data_point 分别以p、o代替从而达到两次更新表data_point的目的。

(2):设定p的sortId列值为srcSortId,o的sortId列值为dstSortId,达到交换的目的。(这里p的sortId值是dstStreamUid行对应的sortId列所对应的值;o的sortId值是srcStreamUid行对应的sortId列所对应的值

(3):通过上传的dstStreamUId和srcStreamUid筛选两行。

扫描二维码关注公众号,回复: 2102200 查看本文章

问题:当我将过滤条件里 and 关键字改为 or 时,整个表的SortId列值全部变为上传的235(上传的dstSortId值,如图)。那么此时的执行顺序什么呢???

       我是这样想的,当执行到set这一步时,p、o两个表的sortId列的数据全部变为各自上传的sortId值,当过滤条件使用or时只需满足其中之一就行,当前面的条件满足时,后面的条件就不执行了(这里只执行了p.streamUid=#{dstStreamUid}这个条件)。以至于造成sortId值全部变为对应srcStreamUid。

        但是当我修改条件的顺序时结果依然同上,然后猜测是字母p、o在字母表中顺序造成的,所以更换为p、q再去反复调整顺序,但是结果依然不变。还是没有找到根本原因。打算在后续学习中搞清楚真正的原因。

猜你喜欢

转载自blog.csdn.net/ty0903csdn/article/details/80867019
今日推荐