SQLServer事务与锁
最近在做一个项目,因为项目需求要设备信息跟数据库信息同步并且要保存数据的正确性,使用了SQLServer的两个功能:事务和锁。
功能前景:设备的信息要跟数据库同步,数据是关联多张表的,数据里面有代码(数据库自动生成)
数据库自动生成代码我们是利用获取最后一条数据的代码然后加1实现的,所以自动生成代码的功能是有缺陷的,假如项目前台同时执行一个SQL语句,那么这两条数据的代码就是一样的,所以为了防止这样的意外数据,我们采用了SQLServer的锁机制。下面解释一下锁:
SQLServer中有常用有5种锁,分别是NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
-
NOLOCK 语句执行时不发出共享锁,允许脏读
-
HOLDLOCK(保持锁) 此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。
-
UPDLOCK(修改锁) 此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。
-
TABLOCK(表锁) 此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据
-
TABLOCKX(排它表锁) 此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据
我们在项