第一个是UPDATE的执行原理。
问题是这么来的:那天小爱问怎么把表中的两行某字段互换,如下:
COL1 COL2
1 A
2 B
变成
1 B
2 A
我就试着写了个更新,本来以为不会成功,结果却成功了本来我的理解是UPDATE逐行更新表中记录,当更新了第一行以后A就没了,但现在看来是理解错了,所以想请教UPDATE的执行原理,也可以单讲上面那个例子。第二个问题是不带排序的SELECT顺序,以前有人问题,但找不到那个帖子了,也不知道结果
SELECT * FROM TB
或者 UPDATE TB SET ....
这里不带排序,按高手的说法每次执行的顺序都可能不同,开始时应该会按插入的次序输出,我的问题是:都有哪些情况会导致SELECT的输出顺序改变?也就是说什么情况会使SELECT * FROM TB的输出顺序改变?说的可能有点啰嗦,也不知道说没说清楚,欢迎大家指教分快赌没了,就不发满分帖了
问题是这么来的:那天小爱问怎么把表中的两行某字段互换,如下:
COL1 COL2
1 A
2 B
变成
1 B
2 A
我就试着写了个更新,本来以为不会成功,结果却成功了本来我的理解是UPDATE逐行更新表中记录,当更新了第一行以后A就没了,但现在看来是理解错了,所以想请教UPDATE的执行原理,也可以单讲上面那个例子。第二个问题是不带排序的SELECT顺序,以前有人问题,但找不到那个帖子了,也不知道结果
SELECT * FROM TB
或者 UPDATE TB SET ....
这里不带排序,按高手的说法每次执行的顺序都可能不同,开始时应该会按插入的次序输出,我的问题是:都有哪些情况会导致SELECT的输出顺序改变?也就是说什么情况会使SELECT * FROM TB的输出顺序改变?说的可能有点啰嗦,也不知道说没说清楚,欢迎大家指教分快赌没了,就不发满分帖了
declare @tb table (id varchar(1),name int)
insert into @tb
select 'a',1 union
select 'b',1 union
select 'c',1 union
select 'd',1 union
select 'e',1declare @s int
set @s=0
update @tb set name=@s,@s=@s+1 ---根据这个理解,应该是一句一句执行的select * from @tb
id name
---- -----------
a 1
b 2
c 3
d 4
e 5(5 行受影响)
(1)、变量赋值优先于更新列值
(2)、变量赋值按列出的先后顺序执行
(3)、对于列的赋值,是更新时同时进行的
SELECT distinct * FROM TB
可能会导致排序