今天在写公司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定位到两行,然后交换两行中某两列的数据,从而达到交换监控点顺序的目的。

(2):设定p的sortId列值为srcSortId,o的sortId列值为dstSortId,达到交换的目的。(这里p的sortId值是dstStreamUid行对应的sortId列所对应的值;o的sortId值是srcStreamUid行对应的sortId列所对应的值)
(3):通过上传的dstStreamUId和srcStreamUid筛选两行。
问题:当我将过滤条件里 and 关键字改为 or 时,整个表的SortId列值全部变为上传的235(上传的dstSortId值,如图)。那么此时的执行顺序什么呢???
我是这样想的,当执行到set这一步时,p、o两个表的sortId列的数据全部变为各自上传的sortId值,当过滤条件使用or时只需满足其中之一就行,当前面的条件满足时,后面的条件就不执行了(这里只执行了p.streamUid=#{dstStreamUid}这个条件)。以至于造成sortId值全部变为对应srcStreamUid。
但是当我修改条件的顺序时结果依然同上,然后猜测是字母p、o在字母表中顺序造成的,所以更换为p、q再去反复调整顺序,但是结果依然不变。还是没有找到根本原因。打算在后续学习中搞清楚真正的原因。