10、MSSQL事务与锁
https://www.cnblogs.com/xrq730/p/5087378.html
一:事务
原子性:事务中的全部内容,要么全部完成,要么全部不完成
一致性:无论事务完成成功还是中途失败,事务中的数据处于一致
隔离性:每个事务都与其他事务独立,一个事务中的行为,
不会被另外的事务中的行为所干扰
持久性:当事务完成,数据库日志被更新,数据库将数据写入磁盘。
事务创建,暂存回滚点,回滚,提交
SELECT * FROM dbo.BookType;
BEGIN TRANSACTION TRANS_NAME
UPDATE dbo.BookType SET BookTypeName='计算机01' WHERE Id=1;
SAVE TRANSACTION SAVE01
UPDATE dbo.BookType SET BookTypeName='英语02' WHERE Id=2;
ROLLBACK TRANSACTION SAVE01 -- 回滚保存的结点SAVE01z之后的修改不再保存
COMMIT TRANSACTION TRANS_NAME;
SELECT * FROM dbo.BookType;
保存的结果是SAVE01后的不再保存到数据库
二:数据库锁
WITH(NOLOCK)使用场景
什么时候可以使用WITH(NOLOCK)? 什么时候不能使用WITH(NOLOCK),这个要视你系统业务情况,综合考虑性能情况与业务要求来决定是否使用WITH(NOLOCK), 例如涉及到金融或会计成本之类的系统,出现脏读那是要产生严重问题的。关键业务系统也要慎重考虑。大体来说一般有下面一些场景可以使用WITH(NOLOCK) 1: 基础数据表,这些表的数据很少变更。 2:历史数据表,这些表的数据很少变更。 3:业务允许脏读情况出现涉及的表。 4:数据量超大的表,出于性能考虑,而允许脏读。
例子:下面开启了事务但是未提交
下面的是测试,nolock将事务未提交的数据去读取,readpast没有。

浙公网安备 33010602011771号