1 如何锁一个表的某一行A 连接中执行SET TRANSACTION ISOLATION LEVEL REPEATABLE READbegin transelect * from tablename with (rowlock) where id=3waitfor delay '00:00:05'commit tranB连接中如果执行update tablename set colname='10' where id=3 --则要等待5秒update tablename set colname='10' where id<>3 --可立即执行2 锁定数据库的一个表SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除
1.同时向数据库插入海量的数据可能会引发什么错误??? A. 因是海量数据,数据库数据文件,日志文件可能过快过大增长,磁盘空间不足. B. 过多数据在缓存中,可能出现内存不足. C. 拥有排他锁的进程,可能因执行时间过长,出现TIMEOUT错误. D. 被阻塞的进程可能因等待逾时出现TIMEOUT错误.2.并发怎么处理??? 根据实际需要,设置事务隔离级别.SQL2000有4个,SQL2008有6个.
1.若通过网络插入,若网络环境不理想,很可能导致数据插入失败;
2.同时在本地插入数据时,还要注意插入的逻辑,有可能导致死锁的发生并发怎么处理:
数据库加锁控制。
请参考:http://www.cnblogs.com/lingmaozhijia/articles/1339222.html
最直接的:服务器负担过重。
数据方面的:可能造成死锁。
2.通过事务来处理,根据处理过程中表的相关性,设置相应的事务隔离级别。
例子:更新库存,入库A产品
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE --设置最高事务隔离级别
begin transaction
读库存中a产品数量 --设置了最高隔离级别后,事务未提交,别的用户可读此表,
-----但更新不了数据
新的数量=读出的数量+入库数量
以新数量更新库存表
commit --提交事务 提交了事务后,别的用户才能更新库存表
注意: 锁定数据库的一个表的区别SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
A. 因是海量数据,数据库数据文件,日志文件可能过快过大增长,磁盘空间不足.
B. 过多数据在缓存中,可能出现内存不足.
C. 拥有排他锁的进程,可能因执行时间过长,出现TIMEOUT错误.
D. 被阻塞的进程可能因等待逾时出现TIMEOUT错误.2.并发怎么处理???
根据实际需要,设置事务隔离级别.SQL2000有4个,SQL2008有6个.