我想知道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  是'小明' 还是 '张三'

解决方案 »

  1.   

    update之前查是张三,update之后查是小明
      

  2.   


    报错、SQL跟代码差不多一样,都是从上往下执行。如果你UPDATE接SELECT后面,第一次查询出来是‘张三’
    如果是在前面就是‘小明’
      

  3.   

    to josySQL 已经查询到第四条数据了在还未查询完所有数据之前对第一条数据进行update 为小明
    查询出来的还是小明么?为什么不是张三呢?
      

  4.   

    不是有这样的需求  而是有这样的问题需要分析系
    我们现在 在做数据同步,但是在同步数据过程中有可能会有用户做update操作
      

  5.   

    建议您去看看SQL语句的执行步骤,您这个查询第一步是从FROM 开始,从TABLEname 返回所有数据,当你看到这个结果的时候,查询已经结束!你也可以参考锁的概念!当数据查询时,数据库会自动给这些数据一定的锁,来保证这些数据在查询完之前不被其他语句修改!
      

  6.   

    用事务得到了验证select top 3 Fid,Fdate from HR_ATS_EmpRoster order by fid 
    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 行受影响)
    即使更新为 '小明'
    查询出的来应该还是张三