【SQL】SQL Server 的事务

显式事务通过 BEGIN TRANSACTION 语句开始,当连接发出后续 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 语句时,主控服务器请求 MS DTC 在所涉及的服务器的管理分布式事务的完成

要么全部完成,要么全部失败。

完成事务:

COMMIT TRANSACTION

回滚事务:

 ROLLBACK TRANSACTION

BEGIN TRY   
      BEGIN TRANSACTION 
     --中间是inser、update、delete等操作
      COMMIT TRANSACTION
END TRY
BEGIN CATCH
     ROLLBACK TRANSACTION;
END CATCH;

 

事务的问题:并发的脏读、不可重复读、幻读;

事务的隔离级别

1 READ UNCOMMITTED 级别  (不隔离,不阻止修改,读取)
该级别不会隔离数据,即事务正在使用的数据,其他事务也能同时对该事物进行修改和删除;使用 READ UNCOMMITTED 级别运行的事务不会发出共享锁来防止其他事务读取或更改数据;

2. READ COMMITTED 级别 (不能读正修改的,不脏读,修改的会锁定)
使用该隔离级别能设定不能读取其他事务正在修改但未提交的数据,这样就不会出现脏读的问题;其他的事务能在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻读;使用 READ COMMITTED 隔离读取事务,事务中的数据仍可能被修改,但已被修改过的数据将一直被锁定,直到事务结束;READ COMMITTED 是 SQL Server 数据库中的默认事务隔离级别;

3. REPEATABLE READ 级别 (有共享锁)
该级别的隔离能指定语句不能读取已被其他事务修改但未提交的行,并指定其他事务都不能修改当前事务正在读取的数据,摘掉当前事务结束;该事务中的每一条语句读取到的每一个数据都设置共享锁;共享锁直到事务完成,这样能防止其他事务修改当前读取的任何行;

4. SERIALIZABLE 级别  (最高级别,锁数据,操作要排队)
这是 SQL Server 中隔离级别最高的,它将所需要使用到的全部数据都进行锁定,这个事务在使用时,别的事务完全不允许添加、删除和修改数据;SERIALIZABLE 等级的隔离事务的并发性最低,但若同一数据要被多个事务使用,就需要让事务进行排队等待;
可使用 SET 语句更改事务的隔离级别,语法格式如下所示:

 

posted on 2023-04-26 14:47  一个小目标一次坑记录  阅读(115)  评论(0编辑  收藏  举报