有这么一句SQL语句:
SELECT b FROM fff WHERE x=1 FOR UPDATE NOWAIT
能告诉我它具体的含义吗?
我只是想取走一些记录并且在提交前不想让别的操作更改这条记录直到commit或rollback为止,用上面的SQL语句可以吗?
另外那个NOWAIT如果去掉可以吗?

解决方案 »

  1.   

    for update 会为记录加锁,直到commit,nowait表示如果select的是否发现记录已经被锁住是否等待,nowait表示不等待直接返回,这样可以防止死锁
      

  2.   

    这个语句的含义就是在你锁定你所选出来的记录,直到你进行commit或者rollback操作之后才解锁,NOWAIT不能去掉
      

  3.   

    如果我执行这条语句的时候还没有commit或rollback时,这时另外一个操作(删或更新)访问这条记录,会报错吗?另外如果这个操作仅仅是查询的话是不是不会有问题?
      

  4.   

    另外一个操作会等待,直到你这条for update语句commit为止,但不会报错,看上去就象死机了一样...
      

  5.   

    to  sasacat(傻傻猫):我的那条SQL语句里有个NOWAIT,难道另一个操作也会一直等下去吗?
      

  6.   

    如果你那条SQL语句A里有个NOWAIT只表明你这那条语句A不用等待,如果想操作的记录没有被锁住就给表加锁执行你这个SQL。如果有锁就返回一个警告。如果在这个A没有commit之前,来了一个普通的查询语句B对这个记录进行操作,就会等待说真的,这些为什么要问呢,你自己试试不就都清楚了吗?