摘要: 在实际的多用户并发访问的生产环境里边,我们经常要尽可能的保持数据的一致性。而其中最典型的例子就是我们从表里边读取数据,检查验证后对数据进行修改,然后写回到数据库中。在读取和写入的过程中,如果在多用户并发的环境里边,其他用户已经把你要修改的数据进行了修改是非常有可能发生的情况,这样就造成了数据的不一致性。解决这样的办法,SQL SERVER提出了乐观锁定和悲观锁定的概念,下边我以一个实例来说明如何使用乐观锁定和悲观锁定来解决这样的问题。create table Card(F_CardNO varchar(20),F_Name varchar(20),F_Flag bit,F_Time datet 阅读全文
posted @ 2013-06-04 23:37 尼姑哪里跑 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 为什么需要锁(并发控制)?在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:l 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。l 脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:用户A,B看到的值都是6,用户B把值改为2,用户A读到的值仍为6。为了解决这些并发带来的问题。 我们需要引入并发控制机制。并发控制机制悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。[1]乐观锁:假设不会发生并发冲突,只在提交操作 阅读全文
posted @ 2013-06-04 20:30 尼姑哪里跑 阅读(219) 评论(0) 推荐(0) 编辑
摘要: Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,fie... 阅读全文
posted @ 2013-06-04 18:59 尼姑哪里跑 阅读(138) 评论(0) 推荐(0) 编辑
摘要: C#程序中避免并发控制: 1.多线程的工作队列 http://www.cnblogs.com/miniwiki/archive/2010/07/09/1774583.html 2.SmartThreadPool的QueueWorkItem,方法http://www.lingdonge.com/csharp/33.html http://support.microsoft.com/kb/832524/zh-cn http://www.cnblogs.com/luluping/archive/2009/07/24/1530497.html SQL Server中解决死锁的新方法介绍数据库 操作的. 阅读全文
posted @ 2013-06-04 18:56 尼姑哪里跑 阅读(1229) 评论(0) 推荐(0) 编辑
摘要: 问题:后台系统需要连接SQL SERVER,瞬时数据操作可能会很大,如同时有好几万数据要插入数据库,但在插入数据的同时另外的线程可能还要访问本数据库,插入数据的操作优先级比较低,其他的访问需要即时返回,想了很久不知道该怎么解决,望高手赐教了。回答:1. 提高服务器硬件配置 2. 使用 replication 之类的同步技术, 将频繁操作的表同步为多份, 将操作分散到这些同步的表中 3. 对于数据查询, 尽量使用 READ UNCOMMITTED 事务隔离级别, 以减少锁的开销===可以使用快照隔离级别===--查询时,使用SET TRANSACTION ISOLATION LEVEL READ 阅读全文
posted @ 2013-06-04 18:50 尼姑哪里跑 阅读(767) 评论(0) 推荐(0) 编辑
摘要: Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用 阅读全文
posted @ 2013-06-04 18:44 尼姑哪里跑 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 简单工作流数据库设计 研发部:罗代均项目(Item)项目ID(ItemId) 项目描述(ItemName) 流程ID (RoutID) 申请人ID (ApplyUserID) 状态(State) 项目类型(ItemType)1 郑州出差借款 1 1 借款单2 郑州出差报销 3 1 报销单这里的项目,是泛指,可以是公文,借款单,报销单等等需要流转的数据.任务列表(TaskList)任务ID(taskId) 项目ID (itemId) 步骤ID (actorId) 状态(state) 版本(version)1 1 1 检出 1002 2 3 检出 10013 3 3 待检出 1002项目申请后,任 阅读全文
posted @ 2013-06-04 10:58 尼姑哪里跑 阅读(342) 评论(0) 推荐(0) 编辑