想要清除一些关于SQL内部的概念.
假设我有一张桌子:
---------tblXY----------- X int Y int
现在它有以下记录:
X Y --- 1 4 2 3 3 2 4 1
我希望得到的表是:
X Y --- 4 1 3 2 2 3 1 4
所以我把查询写成:
UPDATE tblXY SET [X] = Y ,[Y] = X
并得到了所需的结果.
但它是怎么发生的?我的意思是我将X的值设置为Y的当前值,并且在我将Y的值设置为X的时刻.
这是因为操作是单个原子操作 - 在完成任何分配之前首先读取当前值X
和Y
.
所以它不是那么多:
for every row: set x = y set y = x
但更像是:
for every row: set tmpx = x set tmpy = y set x = tmpy set y = tmpx
请记住,这只是概念视图.在封面下,它可能会更有效率.
没有它,你必须自己存储每一行的临时,或只是重命名列:-)