目录

一、什么是事务

二、事务的属性

        1、原子性

        2、一致性

        3、隔离性

          (1)、事务不隔离的会导致的问题

          (2)、事务的隔离级别

          (3)、事务的隔离级别设置

        4、持久性

三、事务分类

        1、显式事务

        2、隐式事务

        3、自动提交事务


一、什么是事务

        事务是在数据库上按照一定的逻辑顺序执行的任务序列,是恢复和控制并发的基本单位,既可以由用户手动执行,也可以由某种数据库程序自动执行。

二、事务的属性

        1、原子性

           保证任务中的所有操作都执行完毕;否则,事务会在出现错误时终止,并回滚之前所有操作到原始状态。

        2、一致性

           事务必须使数据库从一个一致性状态变换到另一个一致性状态。

        3、隔离性

           保证不同的事务相互独立、透明地执行。

          (1)、事务不隔离的会导致的问题

               1、脏读

                一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚)。然后又有其它事务来读取这条没有提交的数据,并进行了操作。

               2、幻读

               3、不可重复读

          (2)、事务的隔离级别

                1、未提交读取(Read Uncommitted)

                事务不彼此隔离。 如果 DBMS 支持其他事务隔离级别,则它会忽略用于实现这些级别的任何机制。 因此,它们不会对其他事务产生不利影响,在读取未提交级别运行的事务通常是只读的。

                2、已提交读取(Read Committed)

                SQL Server的默认隔离级别

                可以防止读取脏数据。

                3、可重复读(Repeatable Read)

                确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。

                4、可序列化(Serializable)

                事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能。

                5、快照(Snapshot)

                6、已提交读取快照(Read Committed Snapshot)

          (3)、事务的隔离级别设置

        4、持久性

           持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

三、事务分类

        1、显式事务

           用 begin transaction 明确指定事务的开始,由 commit transaction 提交事务、rollback transaction 回滚事务到事务结束。

        2、隐式事务

           通过设置 set implicit_transactions on 语句,将隐式事务模式设置为打开。当以隐式事务模式操作时,不必使用 begin transaction 开启事务,当一个事务结束后,这个模式会自动启用下一个事务。只需使用 commit transaction 提交事务或 rollback transaction 回滚事务即可。

        3、自动提交事务

           SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐