摘要: 在使用SQL时,大都会遇到这样的问题,你Update一条记录时,需要通过Select来检索出其值或条件,然后在通过这个值来执行修改操作。 但当以上操作放到多线程中并发处理时会出现问题:某线程select了一条记录但还没来得及update时,另一个线程仍然可能会进来select到同一条记录。一般解决办法就是使用锁和事物的联合机制:如: 1. 把select放在事务中, 否则select完成, 锁就释放了2. 要阻止另一个select , 则要手工加锁, select 默认是共享锁, select之间的共享锁是不冲突的, 所以, 如果只是共享锁, 即使锁没有释放, 另一个select一样可以下共享 阅读全文
posted @ 2011-05-27 11:38 永不放弃-Jack wu 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 实现一个用户取过的数据不被其他用户取到: 问题: 在用ADO访问数据库时,从一个表中取一定的记录(比如20行),取出后在程序中使用,使用完后删除掉记录(不用更新或删除记录)。在多用户操作下(每个用户采用相同的操作),如何保证一个用户已选取的记录不被其他用户选取? 解决方法: 处理此类问题的一般方法是增加一个标志列,每个用户取的记录设置一个标志,新的用户只从标志为未取的记录中获取记录。 在本文中将会利用事务与锁来控制数据的处理,不需要增加任何标志列。 解决的具体示例: 1.建立测试环境 USE tempdbGO CREATE TABLE dbo.tb(id int identity(1, 1), 阅读全文
posted @ 2011-05-27 11:32 永不放弃-Jack wu 阅读(167) 评论(0) 推荐(0) 编辑