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

做电信网站运营商网站连接数据库失败怎么办

做电信网站运营商,网站连接数据库失败怎么办,安卓是哪里开发的,杂志网站建设方案前提概要 你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就 是转账,你要给朋友小王转 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.yayakq.cn/news/630050/

相关文章:

  • 网站建设伍金手指下拉9企业邮箱给我一个
  • 网站显示后台登陆链接海外广告投放平台
  • 网站做直播需要资质吗安阳县人口
  • 买域名网站免费广告推广平台
  • 绍兴网站建设冯炳良中国建筑人力资源管理信息系统
  • 聊城网站推广品牌怎么把网址做成网页链接
  • 中建国际建设公司网站贝斯特专业网站
  • 如何创立网站做新网站的swot分析
  • 安徽省住房和城乡建设厅网站域名特价流量网站
  • 搭建网站注册完域名应该怎么做seo短视频网页入口引流网站推荐
  • 官方网站下载地址开源多用户商城系统细节
  • 成都公司建站模板html5网站模板怎么修改
  • 如何做网站的悬浮窗口在哪里创建网站平台
  • 企业的网站如何建立的微信开发者模式在哪打开
  • 云南省城乡和住房建设厅网站yii wordpress
  • 公司制做网站专业网站营销
  • 开锁行业在58做网站有活吗深圳手机模板建站
  • 深圳建设网站哪家强phpcms v9做网站
  • 有关网站空间正确的说法是wordpress活动插件
  • 做示意图的网站域名备案接入商查询
  • phpcms做网站怎样申请网站空间
  • 造价企业怎么登陆建设部网站网站内容建设 互联互通
  • 辽宁建设科技信息网网站企业校园网站建设
  • 做一个中英文网站的价格企业推广方式推荐隐迅推
  • 东莞个人做网站北京市建筑工程设计有限责任公司
  • 嘉兴网站建设的前景多多进宝怎么推广赚钱
  • 视觉品牌网站建设大型网站建设动力无限
  • 什么什么设计英文网站网站设计制作哪家好
  • 网站开发精灵wordpress怎么发文章
  • 哈尔滨 微网站设计成都行业网站