日期:2014-05-18  浏览次数:20630 次

sql server并发问题发生的情况
请问下面这些情况,哪些会产生并发问题,我的判断对不对?
1、多个用户同时读一张表中的不同字段?[不会]
2、多个用户同时读一张表中的相同字段?[不会]
3、多个用户同时写一张表中的不同字段?[不会]
4、多个用户同时写一张表中的相同字段?[会,需要加锁]
5、多个用户分别读写一张表中的不同字段?[不会]
6、多个用户分别读写一张表中的相同字段?[不一定会]
7、两个用户,同时读写同一张表的同一个字段,一个用户读(select),另一个用户写(update),会不会出现并发问题??[不会]

------解决方案--------------------
纯读是会有共享锁,但不影响性能。而一旦有更新,则会等待更新完成才能读。高版本的SQLServer,比如2008,有快照隔离、行版本隔离,能保证在更新的时候同样能读,但是数据不实时。
另外,SQLServer2012之前,都是最低行锁,所以你更新列,一样会锁住对应的行全部列。2012不记得是不是可以列锁。
如果对于同一个对象(主要是表),一个更新、一个查询,由于更新锁更高级,所以查询会等待,除非查询在更新之前就执行,但是这样会导致不可重复读。