并发
并发是指多个用户能够同时访问数据。当数据库引擎所能支持的并发操作数较大时,数据库并发程度就会增大。在 Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 中,并发控制是通过用锁来帮助保护数据而实现的。锁控制着多个用户如何同时访问和更改共享数据而不会彼此冲突。有关详细信息,请参阅锁定 (SQL Server Compact Edition)。
并发问题
如果您不对多个用户修改和读取数据的情况进行管理,就会出现并发问题。例如,如果多个用户同时访问某个数据库,这些用户的事务就可能会同时对同一数据执行操作。下面列出了使用 SQL Server Compact Edition 时可能出现的一些并发问题:
- 更新丢失。
当两个或更多个事务选择同一行,然后根据原来选择的值更新行时,就会出现更新丢失的问题。最后一次更新会覆盖其他事务所做的更新,从而导致数据丢失。 - 不一致分析(不可重复读)。
当另一个事务多次访问同一行且每次读取不同数据时,就会出现不可重复读问题。这涉及到多次读取同一行的问题。每次进行读取时,信息已被其他事务更改。 - 幻读。
当对属于某事务正在读取的行范围内的行执行插入或删除操作时,就会出现幻读的问题。由于其他事务的删除操作,使事务第一次读取行范围时存在的行在后续读取时已不存在。与此类似,由于其他事务的插入操作,后续读取时会显示原来读取时并不存在的行。
注意: |
---|
还有一个常见的并发问题即未提交的相关性(脏读),SQL Server Compact Edition 之前未发生过此类问题。当一个事务选择另一个事务正在更新的行时,就会出现此问题。第二个事务正在读取的是尚未提交、并可能被更新行的事务更改的数据。在使用 Microsoft SQL Server 2005 时将出现脏读。有关并发问题的详细信息,请参阅 SQL Server 联机丛书中的“Concurrency Effects”。 |
并发控制
在数据库方案中,有两种并发控制机制:
- 乐观并发控制
乐观并发控制假定多个用户之间不可能有资源冲突,因此它允许事务在执行时不锁定任何资源。只有当事务试图更改数据时,才会对资源进行检查。此时将确定是否存在冲突(例如通过检查版本号)。如果出现冲突,应用程序必须读取数据并再次尝试进行更改。乐观并发控制未与产品一起提供,但您可以通过跟踪数据库访问,以手动方式将其编入应用程序中。 - 悲观并发控制
悲观并发控制将在事务过程中根据需要锁定资源。SQL Server Compact Edition 支持在事务过程中根据需要锁定资源的悲观并发控制。
有关乐观并发控制和悲观并发控制的详细信息,请参阅 SQL Server 联机丛书中的“Types of Concurrency Control”。
请参阅
概念
事务 (SQL Server Compact Edition)
锁定 (SQL Server Compact Edition)
多用户访问