当前位置: 首页 > news >正文

广西桂建云证件查询宁波seo整站优化

广西桂建云证件查询,宁波seo整站优化,如何做关于网站推广的培训,网站开发的技术简介前提概要 你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就 是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法…

前提概要

你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就
是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。


转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操
作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100 块钱,完全可以
借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这
时就要用到“事务”这个概念了。


简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL
中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不
是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是
MyISAM 被 InnoDB 取代的重要原因之一。

下边这篇文章是以 InnoDB 为例,剖析 MySQL 在事务支持方面的特定实现

隔离性与隔离级别

提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原
子性、一致性、隔离性、持久性),今天我们就来说说其中 I,也就是“隔离性

当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读
(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有
了“隔离级别”的概念

知识补给

脏读(dirty read)

不可重复读(non-repeatable read)

幻读(phantom read)

直接就是偷懒

 

 结合下边讲的那几个隔离类型更好理解        

回归正题

在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此很多时候,我们
都要在二者之间寻找一个平衡点。SQL 标准的事务隔离级别包括:读未提交(read
uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化
(serializable )

  • 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
  • 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
  • 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
  • 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

其中“读提交”和“可重复读”比较难理解,所以我用一个例子说明这几种隔离级别。假设
数据表 T 中只有一列,其中一行的值为 1,下面是按照时间顺序执行两个事务的行为。

 

咱们上个表,借着这个表来聊这个隔离级别

事务A事务B
启动事务 查询得到1启动事务
查询得到值1
将1改成2
查询得到值V1
提交事务B
查询得到值V2
提交事务A
查询得到值V3

我们来看看在不同的隔离级别下,事务 A 会有哪些不同的返回结果,也就是图里面 V1、
V2、V3 的返回值分别是什么。

        若隔离级别是“读未提交”, 则 V1 的值就是 2。这时候事务 B 虽然还没有提交,但是
结果已经被 A 看到了。因此,V2、V3 也都是 2。

        若隔离级别是“读提交”,则 V1 是 1,V2 的值是 2。事务 B 的更新在提交后才能被 A
看到。所以, V3 的值也是 2。

         若隔离级别是“可重复读”,则 V1、V2 是 1,V3 是 2。之所以 V2 还是 1,遵循的就
是这个要求:事务在执行期间看到的数据前后必须是一致的.

        若隔离级别是“串行化”,则在事务 B 执行“将 1 改成 2”的时候,会被锁住。直到事
务 A 提交后,事务 B 才可以继续执行。所以从 A 的角度看, V1、V2 值是 1,V3 的值
是 2。

说一个跟更更更更简单的理解

        在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。在“可重复
读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。
在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的。这里需要
注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;而“串行
化”隔离级别下直接用加锁的方式来避免并行访问

             我们可以看到在不同的隔离级别下,数据库行为是有所不同的。Oracle 数据库的默认隔离
级别其实就是“读提交”,因此对于一些从 Oracle 迁移到 MySQL 的应用,为保证数据库
隔离级别的一致,你一定要记得将 MySQL 的隔离级别设置为“读提交

        配置的方式是,将启动参数 transaction-isolation 的值设置成 READ-COMMITTED。你
可以用 show variables 来查看当前的值

总结来说,存在即合理,哪个隔离级别都有它自己的使用场景,你要根据自己的业务情况来
定。我想你可能会问那什么时候需要“可重复读”的场景呢?(那么肥春根据所学给你讲讲)

 假设你在管理一个个人银行账户表。一个表存了每个月月底的余额,一个表存了账单明细。
这时候你要做数据校对,也就是判断上个月的余额和当前余额的差额,是否与本月的账单明
细一致。你一定希望在校对过程中,即使有用户发生了一笔新的交易,也不影响你的校对结
果。
这时候使用“可重复读”隔离级别就很方便。事务启动时的视图可以认为是静态的,不受其
他事务更新的影响。

事务隔离的实现

理解了事务的隔离级别,我们再来看看事务隔离具体是怎么实现的。这里我们展开说明“可
重复读”。

在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。(日志操作)记录上的最新
值,通过回滚操作,都可以得到前一个状态的值。

说一下回滚吧

 

假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就会有类似下面的记录。

当前值是 4,但是在查询这条记录的时候,不同时刻启动的事务会有不同的 read-view。如
图中看到的,在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统
中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。对于 read-view A,要
得到 1,就必须将当前值依次执行图中所有的回滚操作得到

同时你会发现,即使现在有另外一个事务正在将 4 改成 5,这个事务跟 read-view A、B、
C 对应的事务是不会冲突的。

 

你一定会问,回滚日志总不能一直保留吧,什么时候删除呢?答案是,在不需要的时候才删
除。也就是说,系统会判断,当没有事务再需要用到这些回滚日志时,回滚日志会被删除。

什么时候才不需要了呢?就是当系统里没有比这个回滚日志更早的 read-view 的时候。

基于上面的说明,我们来讨论一下为什么建议尽量不要使用长事务?

长事务意味着系统里会存在很老的事务视图。由于这些事务随时可能访问数据库,所以这个事务提交之前,数据库里面他可能用到的回滚记录都必须保留,这就会导致大连占用存储空间。初次,长事务还占用锁资源。

事务的启动方式

并不是有意使用长事务,通常是由于误用所致

MySQL 的事务启动方式有以下几种:

显式启动事务语句, begin 或 start transaction。配套的提交语句是 commit,回滚语
句是 rollback

 set autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一
个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行 commit 或 rollback 语句,或者断开连接。有些客户端连接框架会默认连接成功后先执行一个 set autocommit=0 的命令。这就导致
接下来的查询都在事务中,如果是长连接,就导致了意外的长事务。
因此,我会建议你总是使用 set autocommit=1, 通过显式语句的方式来启动事务。

http://www.rdtb.cn/news/18740.html

相关文章:

  • 如何做网站店铺的模板内容营销策略有哪些
  • 嘉定网站建设哪家好公司网络营销实施计划
  • 如果一个网站的域名是google下载app
  • 事业单位网站建设计划seo门户网
  • 怎么弄一个网站拉新推广平台
  • 搞外贸一般是干什么的广州做seo的公司
  • 山东省作风建设网站友链通
  • wordpress插件扫描网站推广优化
  • 服务器如何搭建网站甘肃seo网站
  • 建站之星做网站优化电池充电什么意思
  • ai智能营销系统湖北短视频搜索seo
  • 网站设免费建站软件
  • 公司网站建设设计公司河北网站建设推广
  • 温州免费个人网站制作公司百度指数大数据分享平台
  • 网站开发前景网络广告营销经典案例
  • 淘宝seo关键词的获取方法有哪些seo综合查询平台官网
  • 网站源代码查看迅雷磁力链bt磁力天堂
  • xp系统做局域网内网站谷歌seo排名优化服务
  • 什么是网站平台开发工具域名历史查询工具
  • 宁波网站关键词谷歌推广运营
  • 自己的淘宝网站怎么建设推广app赚佣金
  • 做外贸仿牌网站宁波搜索引擎优化seo
  • 深圳市营销型网站网站提交入口
  • 网站开发语言是什么 东西bt磁力搜索器
  • 葫芦岛做网站价格彼亿营销
  • angular2做的网站有营销型网站建设价格
  • 网站建设丶金手指下拉13seo网站培训优化怎么做
  • 做团餐的企业网站seo网络优化推广
  • 做网站的团队业绩怎么写百度搜索指数排名
  • 搜索引擎推广实训杭州网站优化体验