首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于一个SQL的有关问题,是否需要上锁

2013-10-19 
关于一个SQL的问题,是否需要上锁?我简单说一下我程序是上怎么写的吧。string ohtmlfor(int i0 i5i

关于一个SQL的问题,是否需要上锁?
我简单说一下我程序是上怎么写的吧。

string ohtml="";
for(int i==0 ;i<5;i++)
{
    ohtml+= op(i) + "|";//op函数为获取表A字段zd=0的数据
     setopstate(i);//设置表A字段zd=1的数据
}

这里ohtml 会获取的同样的数据,只是偶尔,我不知道怎么回事

op函数里涉及的sql

select * from A where zd=0 and id= " + i + "

setopstate函数里涉及的sql
update A set zd=1 where id=" + i + "

就是以上问题 sql
[解决办法]
默认隔离级别就够了,但是你那update语句貌似比较低效哦,容易造成性能问题
[解决办法]
查询的时候自动用上共享锁,更新时一般用上独占锁或排它锁。
象你这种语句可以简化,没必要用循环去每次查询或更新一次,应该可以一次性完成。
[解决办法]
默认情况下,读数据就会加共享锁,改数据就会加排它锁,不用你加,除非你很熟悉,不然不建议更改这些操作
[解决办法]

引用:
我简单说一下我程序是上怎么写的吧。

string ohtml="";
for(int i==0 ;i<5;i++)
{
    ohtml+= op(i) + "
[解决办法]
";//op函数为获取表A字段zd=0的数据
     setopstate(i);//设置表A字段zd=1的数据
}

这里ohtml 会获取的同样的数据,只是偶尔,我不知道怎么回事

op函数里涉及的sql

select * from A where zd=0 and id= " + i + "

setopstate函数里涉及的sql
update A set zd=1 where id=" + i + "

就是以上问题


获取到同样的数据,那只不代表有错误,因为为了防止读取到不一致的数据,select查询语句在执行时,也会对需要读取的数据加上共享锁S锁,

而下面的update语句,每次在执行时,都会对需要修改的数据加上独占锁X锁。

所以是不需要你手动上锁的哈。
[解决办法]
建议应加事务处理,取表B数据和更新表A数据,回写表B数据..
这一系列操作,要么全部完成,要么全不做.

热点排行