想要清除有关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.
答案 0 :(得分:5)
这是因为操作是单个原子操作 - 在完成任何任务之前,首先读取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
请记住,这只是概念视图。它可能会更有效率。
如果没有这个,你必须自己为每一行存储临时文件,或者只是重命名列: - )