我想知道SQL数据库在查询过程中是怎样一个流程
比如我要查询5条数据select * from tableNameid name
1 张三
2 李四
3 王五
4 赵六
5 田七
数据是一条一条查询出来的? 如果是
那么比如现在查询到第四条数据了
1 张三
2 李四
3 王五
4 赵六
那么在还未查出所有数据之前我对第一条数据进行UPDATE UDPATE tableName set name='小明' where id=1
那么查询出来id为1的 name 是'小明' 还是 '张三'
比如我要查询5条数据select * from tableNameid name
1 张三
2 李四
3 王五
4 赵六
5 田七
数据是一条一条查询出来的? 如果是
那么比如现在查询到第四条数据了
1 张三
2 李四
3 王五
4 赵六
那么在还未查出所有数据之前我对第一条数据进行UPDATE UDPATE tableName set name='小明' where id=1
那么查询出来id为1的 name 是'小明' 还是 '张三'
报错、SQL跟代码差不多一样,都是从上往下执行。如果你UPDATE接SELECT后面,第一次查询出来是‘张三’
如果是在前面就是‘小明’
查询出来的还是小明么?为什么不是张三呢?
我们现在 在做数据同步,但是在同步数据过程中有可能会有用户做update操作
BEGIN TRANSACTION
Begin
select top 3 Fid,Fdate from HR_ATS_EmpRoster order by fid
update HR_ATS_EmpRoster set Fdate='2012-02-19' where Fid=1
COMMIT
end
select top 3 Fid,Fdate from HR_ATS_EmpRoster order by fid
Fid Fdate
----------- -----------------------
1 2012-02-25 00:00:00.000
2 2010-01-01 00:00:00.000
3 2010-01-01 00:00:00.000(3 行受影响)Fid Fdate
----------- -----------------------
1 2012-02-25 00:00:00.000
2 2010-01-01 00:00:00.000
3 2010-01-01 00:00:00.000(3 行受影响)(1 行受影响)Fid Fdate
----------- -----------------------
1 2012-02-19 00:00:00.000
2 2010-01-01 00:00:00.000
3 2010-01-01 00:00:00.000(3 行受影响)
即使更新为 '小明'
查询出的来应该还是张三