zoukankan      html  css  js  c++  java
  • 理解MySQL(二)--数据库事务

    1、事务:事务内的语句,要么全部执行成功,要么全部执行失败。

    a)      数据库事务四要素:ACID,原子性,一致性,隔离性,持久性。

    b)      原子性:一个事务必须被视为不可分割的最小单元。

    c)      一致性:数据库是从一个一致性状态转换到另外一个一致性状态。

    d)      隔离性:一个事务所做的修改在最终提交前,对其他事务是不可见的。

    e)    持久性:一旦事务提交,其所做的修改就会被永久保存到数据库

    2、 隔离级别:规定了一个事务所做的修改,,哪些在事务内和事务间是可见的,哪些是不可见的。较低级别的隔离可以执行更高的并发,系统的开销也更小。

    a)      READ UNCOMMITED(未提交读):在该级别中,事务的修改,即使没有提交,对其他事务也是可见的事务可以读取未提交的数据,称为脏读。实际很少使用未提交读。

    b)      READ COMMITED(提交读):一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。因为这个级别执行两次查询,可能会得到不同的结果,所以也被称为不可重复读

    c)      PEREATABLE READ(可重复读):保证了在同一事务中多次读取同样记录的结果是一样的。但是该级别还无法解决幻读的问题。幻读,指的是当某个事务在读取某个范围的记录时,另外一个事务又在该范围插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行,也就是读取的记录数不同。可重复读是MySQL的默认事务隔离级别

    d)      SERIALIZABLE(可串行化):最高的隔离级别,通过强制事务串行执行,避免了前面说的幻读的问题。简单来说,SERIALIZABLE会在读取的每一行数据上加锁,所以可能导致大量超时和锁争用问题。

    隔离级别

    脏读可能性

    不可重复读可能性

    幻读可能性

    加锁读

    READ UNCOMMITED

    Yes

    Yes

    Yes

    No

    READ COMMITED

    No

    Yes

    Yes

    No

    PEREATABLE READ

    No

    No

    Yes

    No

    SERIALIZABLE

    No

    No

    No

    Yes

     

    3、死锁:指的是两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。Innodb处理死锁的方式是将持有最少行级排他锁的事务进行回滚。

    4、MySQL中的事务,可以通过实行SET TRANSACTION ISLATION LEVEL命令来设置隔离级别。

     

    更新于2019.7.18

  • 相关阅读:
    微软教程:ASP.NET Core MVC 入门
    微软教程:ASP.NET Core Razor Pages 入门
    微软教程:ASP.NET Core Web API 入门
    微软教程:ASP.NET Core SignalR 入门(实时Web应用)
    Entity Framework Core 系列教程(翻译)
    视频教程:ASP.NET Core 3.x 构建 RESTful API(高级)
    C#(99):C# 9.0 新特性( NET Framework 5.0 与 Visual Studio ? )
    视频教程:VS Core 40分钟进行WebAPI开发和调用(入门级别)
    视频教程:ASP.NET Core 3.x 入门(包括MVC、Razor Page、Blazor、SignalR、gRPC)
    EntityFramework Core入门教程-12-在ASP.NET Core项目中配置EF Core
  • 原文地址:https://www.cnblogs.com/bjm1/p/11206019.html
Copyright © 2011-2022 走看看